Подтвердить что ты не робот

Добавить пользовательскую функцию в ресурс angular $

У меня есть ресурс angular, который выглядит примерно так:

app.factory('User', function ($resource) {
    return $resource(
        '/api/user/:listCtrl:id/:docCtrl/', {
            id: '@id',
            listCtrl: '@listCtrl',
            docCtrl: '@docCtrl'
        }, {
            update: {
                method: 'PUT'
            },
            current: {
                method: 'GET',
                params: {
                    listCtrl: 'current'
                }
            },
            nearby: {
                method: 'GET',
                params: {
                    docCtrl: 'nearby'
                },
                isArray: true
            }
        }
    );
});

теперь я хочу иметь полное имя в представлении, могу ли я добавить метод, чтобы, когда я делаю это

$scope.user = User().current();

вместо следующего в html

<p>{{ user.first_name }} {{ user.last_name }}</p>

Я делаю это

<p>{{ user.get_full_name }}</p>

есть ли способ добавить это свойство в $resource?

4b9b3361

Ответ 1

Вы можете добавить его как свойство с помощью transformResponse, но я могу предложить просто добавить метод к каждому объекту, который возвращает комбинированное имя и фамилию:

app.factory('User', function ($resource) {
    var User = $resource(
        '/api/user/:listCtrl:id/:docCtrl/', {
            id: '@id',
            listCtrl: '@listCtrl',
            docCtrl: '@docCtrl'
        }, {
            update: {
                method: 'PUT'
            },
            current: {
                method: 'GET',
                params: {
                    listCtrl: 'current'
                }
            },
            nearby: {
                method: 'GET',
                params: {
                    docCtrl: 'nearby'
                },
                isArray: true
            }
        }
    );
    // add any methods here using prototype
    User.prototype.get_full_name = function() {
        return this.first_name + ' ' + this.last_name;
    };
    return User;
});

Затем используйте:

<p>{{ user.get_full_name() }}</p>

Любые функции, добавленные с использованием прототипа, будут добавлены к каждому объекту, возвращаемому вашим Сервисом. Это отличный способ добавить вспомогательные методы, если вам нужно выполнить сложное получение или настройку свойств службы.

Ответ 2

после некоторого времени игры с angular, я думаю, что фильтр клиента будет гораздо более мудрым, чем добавление свойства на ресурс $.

вот как сделать фильтр

app.filter('getFullName', function () {
    return function (input) {
      if (input) {
        return input.first_name + ' ' + input.last_name;
      } else {
        return 'default';
      }
    };
  });

Ответ 3

Я думаю, вам стоит взглянуть на способ transformResponse.

Btw, какую версию angular вы используете?