我對Angular有個小問題。 我使用$ngResource
模塊以解決我的服務器「意見」:當使用ngResource模塊時,我的模型沒有正確更新
var app = angular.module('app', ['ngResource']);
app.factory('comment', function($resource) {
return $resource('/comments');
});
app.controller('commentsController', function($scope, comment) {
$scope.comments = comment.query();
});
我用ngRepeat
指令來顯示所有評論:
<li ng-repeat="comment in comments">
{{ comment.comment }}
</li>
到目前爲止,一切都很好。
我想這樣做,當評論提交給服務器時,$scope.comments
屬性更新,更新視圖。我更新了commentsController
$scope
有一種方法:submitComment
它是從ngSubmit
指令調用:
app.controller('commentsController', function($scope, comment) {
$scope.comments = comment.query();
$scope.submitComment = function() {
var commentToSave = new comment();
angular.copy($scope.comment, commentToSave);
commentToSave.$save(function() {
$scope.comments.push(commentToSave);
});
};
});
當調用該方法,「意見」被成功發送到服務器但該視圖不能正確更新。回想一下,我的ngRepeat
指令是在li
上定義的。當我提交「評論」時,會創建一個新的li
(即呈現新的項目符號點),但是主體爲空。我究竟做錯了什麼?
更新:我發現,如果我叫$scope.comments.push(commentToSave);
外的$save
回調,該視圖正確更新。我認爲commentToSave
正在改變,當我打電話$save
,無論如何。
你的後端迴應什麼?我認爲$ save函數會更新響應中項目的值,所以如果它爲空,那麼commentToSave的屬性也將爲空。 (您可以在瀏覽器開發工具的網絡標籤中查看響應,如果在成功函數中有參數,您可以在javascript中看到響應,'commentToSave。$ save(function(result){});') – Patrick
您是否定義了' $ scope.comment'? – Jonas
@帕特里克你撞到了頭上的朋友。我想知道,有沒有辦法禁用這種行爲..?我可以理解這種行爲在許多情況下是如何有用的,但這裏沒有必要。另外,請留下一個答案,我會接受它。 –