为什么需要额外的对象?

12 浏览
0 Comments

为什么需要额外的对象?

这个问题已经有答案了:

在AngularJS中,作用域原型/继承的细微差别是什么?

我正在检查Angular Bootstrap UI,特别是$modal服务,注意到一个有趣的事情。

在他们的样例中\'http://plnkr.co/edit/E5xYKPQwYtsLJUa6FxWt?p=preview\'中,控制器被附加到弹出窗口,他们将选定的项目封装到另一个内部属性中。

$scope.selected = {
   item: $scope.items[0]
};

而不是只有

$scope.selected = $scope.items[0];

的代码实际上按预期工作,而我的版本不行。

为什么需要这样做?这里有什么JavaScript陷阱?

谢谢

admin 更改状态以发布 2023年5月24日
0
0 Comments

这个问题以前一直困扰着我,所以我决定挖一下这个问题的根源。

看起来问题出在原始类型和作用域继承上。将属性存储在对象中可以确保它们不会在指令(如ngRepeat)中被覆盖。

更多信息请参见:https://github.com/angular/angular.js/wiki/Understanding-Scopes

此外值得注意的是,虽然ng-click="selectedItem = item" 不起作用,但 ng-click="selectItem(item)"会起作用,而且不需要容器对象。

0
0 Comments

他们把属性嵌套因为他们想在模式中这样做:

  • {{ item }}
  • ng-repeat 为每个

  • 创建一个子范围(模式也会创建一个子范围);如果您有 $scope.selected = $scope.items[0];,则从 ng-click 设置 selected 会将属性设置在子作用域中,但不会在父作用域中设置(这是该示例中所需的)。另请参见我的答案这里。在这种情况下

    $scope.selected = {
        item: $scope.items[0]
    };
    

    更改将影响父作用域的 selected 对象。

  • 0