У меня есть список элементов, и я отобразил их в шаблоне через 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
, и соответствующая модель - это новый предмет, который я только что добавил (или, может быть, scope
itemController
, в котором содержит позиция).
Проблема:
Когда я добавить элемент в items
, я только иметь доступ к item
и не масштаб недавно созданного элемента. Поэтому я не могу запустить некоторую функцию (например, grabFocus) в области нового элемента. Это что-то семантически неправильно в моем дизайне? Каков канонический подход к этой проблеме?
Plunker ссылка
Here is the plunker link with related comments
Спасибо, но я думаю, что это временное решение, а не чистое решение для таких ситуаций.Предположим, что вместо захвата фокуса была более сложная работа. Я думаю, что это «проблема с предметом» и не должна обрабатываться внешним контроллером. –