#angularjs #angularjs-service
#angularjs #angularjs-сервис
Вопрос:
Таким образом, я использую factory в качестве поставщика ресурсов
angular.module('resources.users').factory('Users', ['serverResource', function (serverResource) {
return serverResource('users');
}]);
где серверный ресурс предоставляет серверный ресурс для REST API…
но есть api для элементов счета-фактуры в этой форме /invoices/{invoice_id}/item/, поэтому мне нужно передать переменную в конструкторе фабрики.
Я обнаружил, что это можно сделать таким образом:
angular.module('resources.invoiceItem').factory('InvoiceItem', ['serverResource', function (serverResource) {
return function (invoiceID) {
if(!angular.isNumber(invoiceID)) {
console.log('InvoiceID has to be number!');
return null;
}
return serverResource('invoices/' invoiceID '/item');
}
}]);
а затем создать экземпляр следующим образом
var insertedItem = new InvoiceItem(inserted_id);
кажется, все в порядке, даже в отладчике я могу использовать метод для crud, такой как $save, $ saveOrUpdate, $ update или $ remove (предоставляется ресурсом сервера), но когда я позвонил
insertedItem.$saveOrUpdate(function(){}, function(){}, function(){}, function(){});
У меня ошибка undefined — это не функция, и я не понимаю, почему? Я также не понимаю, почему console.log(insertedItem) возвращает меня
function (data) {
angular.extend(this, data);
}
Я бы ожидал экземпляр ServerResource…
Итак, мой вопрос в том, что я делаю не так?
Большое спасибо за любой ответ
РЕДАКТИРОВАТЬ: plunker здесь http://plnkr.co/edit/VkZo5kbiNAyudb0yFPhu
Комментарии:
1. Попробуйте воссоздать в скрипке.
2. plunker добавлен к вопросу
3.
$saveOrUpdate
функции нет4. был метод $save, хотя, например, точное присвоение имен не требуется, поэтому я переименовал его в $saveOrUpdate
Ответ №1:
Вам нужно вернуть объект, но вы возвращаете функцию конструктора.
Измените return Resource
, чтобы вернуться new Resource
на serverResource
фабрику.
Редактировать:
Продолжая комментарии, попробуйте это:
return function() {
return serverResource('invoices');
}
Комментарии:
1. Большое спасибо, это работает, но разве это не испортит простые ресурсы, подобные этому pastebin.com/ZMEVR1Jb ? Похоже, это проблема, см. Этот Плунжер plnkr.co/edit/3ypFMfN5l4JgVuNNkk02
2. @blazek idk, что вы пытаетесь сделать. вы не можете ожидать, что функция-конструктор, которую вы возвращаете из первой фабрики, будет вести себя так же, как объект, который вы возвращаете из второй.
3. У меня есть серверный ресурс для стандартного rest api (например: /invoices/ — GET, POST, PUT, DELETE), но у меня есть элементы для каждого счета, и api похож на (/invoices/{InvoiceID}/), поэтому мне нужно как-то передать идентификатор счета в адрес rest, этоединственное исключение в моем API, все остальные находятся в стандартной форме, но я не знаю, как это сделать с помощью factory … извините за мое возможное плохое объяснение
4. Спасибо, что помогли мне, но я боюсь, что это не решит мою проблему… Мне просто нужно передать параметр (мне нужен этот объект ServerResource ..) на завод или использовать лучший компонент, но как новичок, я не уверен, какой именно…
5. @blazek извините, я не могу понять, чего вы хотите.