Как вызывать любую функцию контроллера в директиве в angularJs
Я пытаюсь вызвать функцию родительского контроллера, которая не имеет ничего общего с директивой, когда значение привязки директивы изменилось.
Я просматривал вопросы и ответы в стеке, но все они связаны с передачей значения из директивы в контроллер, что не в моем случае.
Я думал, что мой случай в целом распространен, сценарийтаково: отображать сложные объекты в цикле, одно из свойств привязки объекта к директиве.и когда свойство изменилось, сделайте что-нибудь с обновленным сложным объектом.
Однако в моем коде он печатает старое значение объекта вместо обновленного.Я предполагаю, что моя функция обновления вызывается до завершения процесса $ digest.
есть предложения?
пример плунжера: https://plnkr.co/edit/bWGxEmJjNmiKCkRZTqOp?p=preview
здесь контроллер код:
var $ctrl = this;
$ctrl.items = [
{id: 1, value: 10}, {id: 2, value: 20}, {id: 3, value: 30}
];
$ctrl.update = function(item){
//trying to update item after changing
console.log("updated item is: " + angular.toJson(item));
};
вот код директивы код:
var controller = function($scope){
var $ctrl = this;
$ctrl.clicked = function(){
$ctrl.value = $ctrl.value + 1;
//calling the bind on-change function defined in controller
$ctrl.onChange();
}
};
return {
restrict: 'E',
scope: {
value: '=',
onChange: '&'
},
controller: controller,
controllerAs: '$ctrl',
bindToController: true,
templateUrl: 'directive.html'
};
и HTML выглядит так:
<div ng-repeat="item in mc.items">
<my-directive value="item.value" on-change="mc.update(item)"></my-directive>
</div>
и шаблон директивы:
<button type="button" ng-click="$ctrl.clicked()">{{$ctrl.value}}</button>