2013-10-25 5 views
1

У меня есть ссылки действий на странице, которые меняют части модели. В ссылках есть функции ng-click, которые запускают действие сервера, которое возвращает часть модели, которая была изменена. Я присваиваю результат $ http.get (...) части измененной модели. Но данные никогда не разрешаются.AngularJS как изменить часть модели

GuideControllers.controller('VideoDetailCtrl', ['$scope', '$http', '$routeParams', 'Video', 
    function($scope, $http, $routeParams, Video, Preference) { 
     $scope.video = Video.get({ id: $routeParams.id }); 
     $scope.addToWatchlist = function(id) { 
      $scope.video.prefs = $http.get('/api/preference/'+id+'/add_to_watchlist.json') 
     } 
    } 
]); 

Первый Video.get (...) заполняет в модели с обещанием, что в конечном итоге изменяет страницу, то video.prefs правильно, когда решены. Но когда я получаю видео.prefs отдельно, они никогда не решаются. Я попытался сохранить обещание $ http.get в отдельной переменной, а затем в $ http.get (...). Success (... Я скопировал части из переменной в videos.prefs, но это не сработало с тех пор временный секретарь жизнеспособный был обещанием - я думаю

Как я должен изменить часть модели, задавая сервер только для этого бита

+0

Вам нужно.? '.success' после' .get', иначе он не будет разрешен, если вы этого не сделаете позже. – tymeJV

+0

Как вы получаете доступ к '$ scope.video.prefs'? Это привязка HTML? –

+0

tymeJV: I попытался присвоить t он предпочитает функцию .success, но это не сработало. Отладчик сказал, что префы были обещанием, я не мог видеть, что там есть ценности. CaioToOn: пример ng-class = "{iconSelected: video.prefs.user_watchlist == 0}" или в теге контента

{{video.prefs.user_watchlist}}
Первый показ на выборке шаблонов отлично работает, после $ http.get значения пустые/нулевые/не определено. – pferrel

ответ

1

Это следует сделать это:

GuideControllers.controller('VideoDetailCtrl', ['$scope', '$http', '$routeParams', 'Video', 
    function($scope, $http, $routeParams, Video, Preference) { 
     $scope.video = Video.get({ id: $routeParams.id }); 

     $scope.addToWatchlist = function(id) { 
      $http.get('/api/preference/'+id+'/add_to_watchlist.json').success(function(data) { 
       $scope.video.prefs = data; 
      }); 
     } 
    } 
]); 
+0

Эт вуаля, это ответ. – pferrel

+0

Сначала я оставил '$ scope.video.prefs = $ http.get (...' in и UI вспыхнул. Это, по-видимому, потому, что на время до выполнения обратного вызова prefs является обещанием, поэтому его значения не определены , что приводит к тому, что ng-класс в шаблоне имеет недопустимое выражение, в результате чего css будет удален. Это оставило плохое состояние пользовательского интерфейса для любых объектов, относящихся к prefs. Вызвало назначение, назначенное только в обратном вызове, и flash уходит, показывая плавный переход UI. BTW ng-cloak не помогает в этом. – pferrel

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