Angular.extend $ resource с функциями для экземпляров $ resource

0

Я хочу создать функцию $ saveOrUpdate, которая примет успешный обратный вызов, и я хочу использовать эту функцию в экземпляре моей службы ресурсов $ resource, а не распространять сама услуга.

Поэтому, если я хочу расширить службу, я просто пишу что-то в этих строках:

angular
    .module('company-registry.company')
    .factory('Company', Company);

Company.$inject = ['$resource'];
function Company($resource) {
    var companyService = $resource("https://api.mongolab.com/api...", { update: { method: 'PUT' } });

    angular.extend(companyService, {
        saveOrUpdate: function(company, successCallback) {...}
    });
    return companyService;
}

Это создает функцию saveOrUpdate для фактической службы, но я хочу, чтобы следующий код работал:

var company = new Company();
company.$saveOrUpdate(cb);

У меня есть два вопроса:

  • так как мой метод $ saveOrUpdate должен будет вызвать $ save или $ update в моей компании, как мне ссылаться на объект, на который вызывается функция?

  • Как расширить методы, доступные в экземплярах моего сервиса?

  • 0
    что такое new Company() ?
  • 0
    Мой плохой за то, что не предоставил полный код «Компания», это название сервиса. Я добавлю полный код.
Теги:
angular-resource
extend

1 ответ

0
Лучший ответ

Попробуй это:

function Company($resource) {
    var companyService = $resource("https://api.mongolab.com/api...", { update: { method: 'PUT' } });

    return angular.extend({
       "$saveOrUpdate":function(cb){
           ...
        }
     }, companyService);
}

Изменение: изменения, сделанные на основе комментариев. Взгляните на эту скрипку. Это имеет смысл? Порядок объекта в методе extend имеет значение. Зависит от того, хотите ли вы добавить новые свойства к существующему объекту или создать новый, расширив другой. Вы можете самостоятельно ссылаться на Company используя this как показано в примере.

return angular.extend({
        hello: function (text) {
            console.log(text);
            return text + " - OK";
        },
        saveOrUpdate: function (successCallback) {
            var response = this.hello("Foo Bar!");
            return successCallback(response);
        }
    }, companyService);
  • 0
    Не могли бы вы объяснить это? Я не уверен, как это расширяет доступные функции экземпляров $ resource, и при этом я не вижу, где я заявляю, какой объект должен быть сохранен или обновлен.
  • 0
    Должно быть, я неправильно понял вопрос раньше. Я отредактировал ответ. Это помогает?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню