簡體   English   中英

角$ scope變量在更新時中斷

[英]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,因為它可以更好地正確合並對象而不破壞范圍。

https://docs.angularjs.org/api/ng/function/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM