TL; DR跳到底部 - >如果范围变量不在对象中,为什么不会ng类工作?
我发现Codepen,here一个纳克级的示例(重要代码下面再现)。
其中,作者创建了一个简单的菜单栏,突出显示活动项目。相当标准。不过,我认为他做这件事的方式很有趣,所以我将其改为对我更有意义,而且令人惊讶的是它破裂了。
笔者创建他的观点是这样的:
...
<div>Change the active menu item:
<input ng-model="states.activeItem" />
</div>
<ul class="navigation">
<li ng-repeat="item in items" class="item" ng-class="{'active': item.id == states.activeItem}" ng-click="states.activeItem=item.id">{{item.title}}</li>
</ul>
....
,而他的控制器看起来像
app.controller('NavigationController', function ($scope) {
// Must use a wrapper object, otherwise "activeItem" won't work
$scope.states = {};
$scope.states.activeItem = 'item1';
$scope.items = [{
id: 'item1',
title: 'Home'
}, {
id: 'item2',
title: 'Public Rooms'
}, {
id: 'item3',
title: 'My Rooms'
}];
});
对我来说,我认为这将是更容易跳过states
变量,只是有一个
$scope.activeItem
所以我改变了控制器,并将视图改为
<div>Change the active menu item:
<input ng-model="states.activeItem" />
</div>
<ul class="navigation">
<li ng-repeat="item in items" class="item" ng-class="{'active': item.id == activeItem}" ng-click="activeItem=item.id">{{item.title}}</li>
</ul>
但是它现在不起作用。
所以它似乎出于某种原因Angular需要将这些变量存储在一个新的对象。但为什么?
TL; DR:这里都是Codepens:
The Original(伟大工程)
Mine(不工作)
为什么不是我的工作?
它有角的范围继承做。我建议你阅读这个有趣的帖子http://stackoverflow.com/questions/14049480/what-are-the-nuances-of-scope-prototypal-prototypical-inheritance-in-angularjs – kubuntu 2014-11-23 11:40:12