我有一个项目列表,我已经通过ng-repeat
将它们呈现在模板中。它们中的每一个都受itemController
的控制,其暴露项目的一些行为(例如,抓取焦点)。下面是HTML:访问对应于模型变量的子范围
<body ng-controller="mainController">
<button ng-click="addItem()">add</button>
<ul>
<li ng-repeat="item in items" ng-controller="itemController">
<div ng-if="item.isEditing">
<input ng-model="item.name"/>
<button ng-click="item.isEditing=false">done</button>
</div>
<span ng-if="!item.isEditing">{{item.name}}</span>
</li>
</ul>
</body>
在mainController
,我有加入新的项目,以项目一个功能。下面是mainController的代码:
app.controller('mainController', function($scope){
$scope.items = [
{
name: "alireza"
},
{
name: "ali"
}
];
$scope.addItem = function(){
$scope.items.push({isEditing: true});
}
});
每当我将项目添加到items
阵列,对应li
元素被添加到视图是通过itemController
一个实例控制,以及相应的模型是我刚刚添加的新项目(或者可能是itemController
的scope
,其中包含项目)。
问题:
当我加入一些项目items
,我只能访问item
和最近创建的项目不是范围。所以我不能在新项目的范围上运行一些函数(如grabFocus)。 在我的设计中,它在语义上是错的吗?这个问题的典型方法是什么?
Plunker链接
Here is the plunker link with related comments
谢谢你,但我认为这是一种解决方法,而不是针对这些情况一个干净的解决方案。假设有一个更复杂的工作,而不是抓住焦点。我认为这是'项目'的问题,不应该在外部控制器中处理。 – 2014-11-01 01:58:44