У меня есть директива с шаблоном вроде
<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
синхронно без тайм-аута или наблюдателя?