api diretiva angularjs

suponha que você esteja usando angular e tenha uma diretiva para a qual passa dados para:

<my-chart data="chartData"></my-chart>

suponha que a diretiva precise executar alguma lógica quando os dados forem alterados. você provavelmente usará $ watch :

angular.module('app')
.controller('MainController', function($scope){
function dataChange(){
$scope
.chartData= {...};
}
})
.directive('myChart', function(){
return {
scope
: {data: '='},
link
: function(scope){
function redraw(){...}
scope
.$watch('data', redraw);
}
};
});

o problema com essa solução é que ela depende do loop $ digest do angular .

aqui está uma maneira de invocar redraw () da diretiva diretamente do controlador:

angular.module('app')
.controller('MainController', function($scope){
$scope
.chartApi= {};//empty object
function dataChange(){
$scope
.chartData = {...};
$scope
.chartApi.redraw();
}
})
.directive('myChart', function(){
return {
scope
: {data: '=', api: '='},
link
: function(scope){
function redraw(){...}
scope
.api.redraw = redraw;
}
};
});

e em html:

<my-chart data="chartData" api="chartApi"></my-chart>