Angular $scope变量在更新时中断

Angular $scope variable breaking on update

本文关键字:更新 中断 变量 scope Angular      更新时间:2023-09-26

在我的菜单控制器中,我有一个保存菜单的函数。美元的范围。菜单变量保存表示我的菜单数据的对象。saveMenu函数向REST API端点发送一个Ajax调用,然后作为响应接收更新后的菜单。问题是,当我赋值$scope时。菜单,以响应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不喜欢的一些属性。

为什么绑定到HTML模板中断?

在成功函数的赋值语句之前,$作用域。菜单看起来像这样。

{
   name: "My Menu",
   sections: [
      { $$hashKey: "object:17", id: 1, name: "blarg"}
   ]
}

之后是这样的…

{
   name: "My Menu",
   sections: [
      { id: 1, name: "blarg-edited"}
   ]
}

会丢失$$hashKeys,因为Angular在最初创建菜单时就把它放进去了。不知道这有什么意义

我不建议对angular $作用域的任何属性使用jQuery的扩展函数。$scope是一个复杂的对象,有很多指向特定属性的指针等等。我建议使用angular。合并,因为它应该在不破坏作用域的情况下更好地正确合并对象。

https://docs.angularjs.org/api/ng/function/angular.merge

我还不能评论,所以我就把这个放在这里。

调试到什么程度了?

我会看$scope。菜单,然后在你的成功方法中再次更新。

你的数据/模板是什么样子的?

只是为了我自己的好奇,为什么深$。扩展吗?可能是完全有效的,我只是从来没有这样使用过。

看到你的更新,$hashkey不应该是一个问题,如果你不想要它,你angular.copy(data)或简单地把跟踪by在你的ng-repeat:

data-ng-repeat="item in menuItems track by $index"