我有一个带有模板的指令
<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没有超时或观察者的情况下同步执行?