У меня есть директива с шаблоном вроде
<div>
<div ng-repeat="item in items" ng-click="updateModel(item)">
<div>
Моя директива объявлена как:
return {
templateUrl: '...',
restrict: 'E',
require: '^ngModel',
scope: {
items: '=',
ngModel: '=',
ngChange: '&'
},
link: function postLink(scope, element, attrs)
{
scope.updateModel = function(item)
{
scope.ngModel = item;
scope.ngChange();
}
}
}
Я хотел бы, чтобы ng-change
вызывался при нажатии элемента, а значение foo
уже было изменено.
То есть, если моя директива реализована как:
<my-directive items=items ng-model="foo" ng-change="bar(foo)"></my-directive>
Я ожидаю, что вызову bar
, когда значение foo
будет обновлено.
С кодом, приведенным выше, ngChange
вызывается успешно, но вызывается со старым значением foo
вместо нового обновленного значения.
Один из способов решить проблему — вызвать ngChange
внутри тайм-аута, чтобы выполнить его в какой-то момент в будущем, когда значение foo
уже было изменено. Но это решение лишает меня контроля над порядком выполнения вещей, и я предполагаю, что должно быть более элегантное решение.
Я также мог бы использовать наблюдателя над foo
в родительской области, но это решение на самом деле не дает реализации метода ngChange
, и мне сказали, что наблюдатели являются большими потребителями памяти.
Есть ли способ заставить ngChange
выполняться синхронно без тайм-аута или наблюдателя?
Пример: http://plnkr.co/edit/8H6QDO8OYiOyOx8efhyJ?p=preview.