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>