![](/img/trans.png)
[英]Angular JS how to update scope variable inside another scope variable
[英]Angular $scope variable breaking on update
在我的菜單控制器中,我具有保存菜單的功能。 $ scope.menu變量保存代表我的菜單數據的對象。 saveMenu函數將Ajax調用發送到REST API端點,然后將更新后的菜單作為響應返回。 問題是當我將$ scope.menu分配給響應時,HTML模板中的所有數據綁定都中斷了。 突然所有菜單數據消失。
控制器代碼。
$scope.saveMenu = function() {
var menu = $scope.createJsonMenuRequest();
var method = "PUT";
var url = FoodUrls.foodAPI + "menus/" + menu.id;
var req = {
method: method,
url: url,
headers: {
"Content-Type": "application/json"
},
data: angular.toJson(menu)
};
$http(req).success(function(data) {
$scope.menu = $.extend(true, {}, data);
});
};
createJsonMenuRequest函數僅瀏覽菜單,並從該API中刪除一些API不喜歡的屬性。
為什么與HTML模板的綁定中斷?
更新
在成功函數中的賦值語句之前,$ scope.menu看起來像這樣。
{
name: "My Menu",
sections: [
{ $$hashKey: "object:17", id: 1, name: "blarg"}
]
}
之后看起來像這樣...
{
name: "My Menu",
sections: [
{ id: 1, name: "blarg-edited"}
]
}
最初創建菜單時,它將丟失Angular放入其中的$$ hashKeys。 不知道那是什么意思。
我不建議針對有角度的$ scope上的任何屬性使用jQuery的extend函數。 $ scope是一個復雜的對象,具有許多指向特定屬性等的指針。 我建議使用angular.merge,因為它可以更好地正確合並對象而不破壞范圍。
我還不能發表評論,所以我將其放在這里。
您調試了多遠?
我會在更新之前查看$ scope.menu,然后在成功方法之后查看。
您的數據/模板是什么樣的?
只是出於我自己的好奇心,為什么要使用$ .extend這么深? 可能是完全有效的,我只是從未以這種方式使用過。
看到您的更新,$ hashkey應該不是問題,如果您不想要它,可以使用angular.copy(data)或在ng-repeat中簡單地添加一個軌道:
data-ng-repeat="item in menuItems track by $index"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.