关于javascript:为什么需要额外的对象?

Why an extra object is needed?

本问题已经有最佳答案,请猛点这里访问。

我正在检查AngularBootstrapUI,特别是服务$modal,发现了一个有趣的事情。

在他们的示例中"http://plnkr.co/edit/e5xykpqwytsljua6fxwt?"p=preview'在附加到弹出窗口的控制器中,它们已将所选项目封闭到另一个内部属性中。

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

而不是

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

事实上,它们的代码可以像预期的那样工作,而我的版本却不能。

为什么需要这样做?这里有什么javascript?

谢谢


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

1
2
3
4
<li ng-repeat="item in items">
    {{ item }}

</li>

ng-repeat为每个

  • 创建一个子作用域(模式也是创建一个子作用域);如果您有$scope.selected = $scope.items[0];的话,从ng click设置selected将在子作用域中设置属性,而不是父作用域(在该示例中是您想要的)。也可以在这里看到我的答案。在情况下

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

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


    这以前一直困扰着我,所以我决定四处挖掘。

    这似乎与原语和范围继承有关。将属性存储在对象中可以确保它们不会在ngrepeat等指令中被覆盖。

    更多信息请访问:https://github.com/angular/angular.js/wiki/understanding-scopes

    另外值得注意的是,在执行ng click="selecteditem=item"操作时,ng click="selectitem(item)"将无法工作,而没有容器对象。