2013-02-26 4 views
-1

У меня есть очень простой ресурс следующим образом:

angular.module('ExampleServices', ['ngResource']). 

     factory('NoteService', function($q, $rootScope, $resource){ 
     var baseurl = "/api/v1/note/"; 
     var Note = $resource(baseurl, {}, { 

      // get notes method  
      get_for_model: { 
       method: 'GET', 
       params:{user: '', object_id: ''}, 
       isArray: false 
      }, 

      // leave note method 
      leave_note: { 
       method: 'POST', 
      } 

     }); 
     return Note 
    } 
); 

И в контроллере я вызвать метод leave_note следующим образом:

$scope.note = function(){ 
     $scope.note = NoteService.leave_note({ 
      desc: desc, 
      title: title, 
      object_id: oid, 
     }); 
    } 

В основном это вызывает метод POST к API приложений API приложений и созданным объектам. Как только страница обновится, я вижу заметку, указанную в notes. Но, насколько мне известно, $resource должен обновить представление самостоятельно.

Цитата из docs

Важно понимать, что вызов метода объекта $ ресурса немедленно возвращает пустую ссылку (объект или массив в зависимости от IsArray). Как только данные возвращаются с сервера, существующая ссылка заполняется фактическими данными.

Я не в состоянии использовать $rootScope.$apply в методе leave_note, пока я не определить его как функцию (следующим образом :)

leave_note: function(){ 
    var note = New Note(); 
    note.desc = desc; 
    note.title = title; 
    note.object_id = oid; 
    note.$save(); 
    $rootScope.$apply(); 
} 

, но и в предыдущем случае вызов отправить к REST API имеет undefined способ запроса.

Другая проблема, о которой я могу думать, заключается в том, что у меня нет $scope.note, но есть $scope.notes, который является списком заметок, отправленных REST api. Так что, возможно, $scope.note обновляется, но поскольку я не отрисовка объекта note, но визуализация notes с использованием ng-repeat в шаблонах, я не могу видеть изменения в шаблоне.

Я также попытался повторно извлечь объект заметок после сохранения новой заметки, но в основном удаляет все заметки, а затем повторно отображает все, что выглядит уродливым (почти как обновление страницы).

То, что я пытаюсь достичь, сразу после сохранения объекта note, я хочу, чтобы новое примечание было объединено с существующими заметками. Пожалуйста, направляйте меня. Спасибо

+0

downvoter? Пожалуйста, объясните свое нижестоящее. – Amyth

ответ

1

Вам не нужно использовать $rootScope.$apply, ваша миссия поняла, что документы API $resource.

В документации $resource упоминается: «После того, как данные будут возвращены с сервера, существующая ссылка заполнена фактическими данными».. Это означает, что когда вы делаете $scope.notes = NoteService.get_for_model();, вы запрашиваете $scope.notes для заполнения (будущих) данных, полученных от запроса GET NoteService.get_for_model. API $resource будет отвечать за выполнение именно этого - обновите модель $scope.notes - ничего более. Обратите внимание, что в нем не упоминается, что ваши данные будут автоматически обновляться, когда вы выполняете POST на этой же службе.

Если вы хотите обновить свою $scope.notes модели после добавления новой заметки (POST), и не хотят, чтобы запросить список целых нот, попробуйте добавить новое примечание непосредственно к $scope.notes модели на POST успеха обратного вызова :

var note = NoteService.leave_note({ 
      desc: desc, 
      title: title, 
      object_id: oid, 
     }, function() { 
      $scope.notes.push(note.$get());     
     } 
); 

Обратите внимание, что это может быть значительно улучшена (т.е. избежать $get), но так как я не знаю точные детали вашей реализации я только при условии, общее решение.

+0

Спасибо, что нашли время ответить. Я действительно закончил использование '$ scope.notes.push (note)', и он обновляет данные. Приветствия! – Amyth

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