Правда ли, что у $ resource есть ограничение на использование не надлежащего будущего, учитывая, что эта проблема (https://github.com/angular/angular.js/issues/415) закрыта? (Я новичок в Angular, извиняюсь, если вопрос сбивает с толку.) РЕДАКТИРОВАТЬ - Этот коммит ( github.com/angular/angular.js/commit/… ) также, похоже, предполагает, что $ resource может не иметь такого ограничения больше?
Джейсон Сайдс
1
ну, это законно здесь, чтобы ответить на ваши собственные вопросы .. ладно? нажмите «Задать вопрос», это называется «поделиться своими знаниями»
holms
Ответы:
229
Бывают случаи, когда $ resource может не подходить для общения с бэкендом. Здесь показано, как настроить поведение $ resource без использования ресурса.
angular.module('myApp').factory('Book',function($http){// Book is a class which we can use for retrieving and // updating data on the servervarBook=function(data){
angular.extend(this, data);}// a static method to retrieve Book by IDBook.get=function(id){return $http.get('/Book/'+ id).then(function(response){returnnewBook(response.data);});};// an instance method to create a new BookBook.prototype.create =function(){var book =this;return $http.post('/Book/', book).then(function(response){
book.id = response.data.id;return book;});}returnBook;});
Тогда внутри вашего контроллера вы можете:
varAppController=function(Book){// to create a Bookvar book =newBook();
book.name ='AngularJS in nutshell';
book.create();// to retrieve a bookvar bookPromise =Book.get(123);
bookPromise.then(function(b){
book = b;});};
Может быть, вопрос нуб, но как можно расширить это, чтобы получить get (), который возвращал несколько ответов, а не один ответ?
Нейт Банни
2
@NathanBunney, ваш статический метод get, приведенный выше, может перебрать результаты и создать массив книг.
Бен Леш
4
@NathanBunney 'Book.getAll = function () {return $ http.get (' / Book '). Then (function (response) {var books = []; for (var i = 0; i <response.data.length) ; i ++) {books.push (новая книга (response.data [i]));} вернуть книги;}); };»
Яир Невет
2
Как бы вы поделились bookили коллекции books между контроллерами?
Лукас
1
Это здорово (очевидно, с тех пор как Миско создал фреймворк), но я изо всех сил пытаюсь понять, как сделать его многоразовым. Если бы я хотел реализовать функции CRUD только один раз, а затем унаследовать их функциональность на дочерних фабриках / сервисах, которые нуждались только в аргументе urlBase (желательно, сохраненном в прототипе, чтобы каждому экземпляру не требовалась новая копия urlBase), как бы Я делаю это?
Он может поддерживать (переопределение URL) в следующей версии Angularjs. Тогда вы сможете кодировать так:
// need to register as a serviceName
$resource('/user/:userId',{userId:'@id'},{'customActionName':{
url:'/user/someURI'
method:'GET',params:{
param1:'....',
param2:'....',}},....});
И обратные обратные вызовы могут быть обработаны в области видимости ctrl следующим образом.
Ответы:
Бывают случаи, когда $ resource может не подходить для общения с бэкендом. Здесь показано, как настроить поведение $ resource без использования ресурса.
Тогда внутри вашего контроллера вы можете:
источник
book
или коллекцииbook
s между контроллерами?Я рекомендую вам использовать $ resource .
Он может поддерживать (переопределение URL) в следующей версии Angularjs. Тогда вы сможете кодировать так:
И обратные обратные вызовы могут быть обработаны в области видимости ctrl следующим образом.
Вероятно, вы можете обрабатывать код на более высоком уровне абстракции.
источник