为什么需要额外的对象?
为什么需要额外的对象?
这个问题已经有答案了:
我正在检查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日
这个问题以前一直困扰着我,所以我决定挖一下这个问题的根源。
看起来问题出在原始类型和作用域继承上。将属性存储在对象中可以确保它们不会在指令(如ngRepeat)中被覆盖。
更多信息请参见:https://github.com/angular/angular.js/wiki/Understanding-Scopes
此外值得注意的是,虽然ng-click="selectedItem = item" 不起作用,但 ng-click="selectItem(item)"会起作用,而且不需要容器对象。
他们把属性嵌套因为他们想在模式中这样做:
ng-repeat
为每个
$scope.selected = $scope.items[0];
,则从 ng-click 设置 selected
会将属性设置在子作用域中,但不会在父作用域中设置(这是该示例中所需的)。另请参见我的答案这里。在这种情况下
$scope.selected = { item: $scope.items[0] };
更改将影响父作用域的 selected
对象。