2015-10-02 5 views
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); 

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

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

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

+0

Что такое '' новая компания() '? – smnbbrv

+0

Мой плохой для того, чтобы не отправлять полный код, «Компания» - это название услуги. Я добавлю полный код. – user2352164

ответ

0

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

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

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

редактирование: Изменения, сделанные на основе комментариев. Посмотрите на это Fiddle. Это имеет смысл? Порядок объекта в 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

Не могли бы вы объяснить это? Я не уверен, как это расширяет доступные функции экземпляров ресурса, а также не вижу, где я могу указать, какой объект следует сохранить или обновить. – user2352164

+0

Я, должно быть, неправильно понял вопрос раньше. Я отредактировал ответ. Это помогает? –

+0

Помимо изменения порядка аргументов в функции angle.extend, как это отличается от моего кода? Я хочу, чтобы метод $ saveOrUpdate был доступен так же, как у меня есть функция $ save, доступная для объектов $ resource, и не иметь эту функцию для уровня сервиса. Также это не отвечает, как я могу ссылаться на объект компании в методе $ saveOrUpdate. – user2352164

 Смежные вопросы

  • Нет связанных вопросов^_^