我有一个读取一些csv数据的控制器:
app.controller('MainCtrl', function($scope) {
d3.csv('data.csv', function(err, rows){
// add id field to each row
$scope.$apply(function(){
rows.forEach(function(r, i){
r['id'] = 'a' + padString(i, 3, '0');
});
$scope.data = rows;
});
});
});
使用它的指令:
app.directive('ngbarChart', function(){
function link(scope, el, attr){
scope.$watch('data', function(newVal, oldVal){
if(newVal) {
console.log('new stuff! now we can do useful things!')
}
}, true);
}
return {
restrict: 'E',
link: link,
scope: {
data: '='
}
}
})
HTML:
<div ng-app="myApp" ng-controller="MainCtrl">
<ngbar-chart data="data"></ngbar-chart>
</div>
但是! scope.$watch
中的回调只运行一次 - 在控制器完成加载数据并将其传递到$scope.data
之前。
我错过了什么?
提前致谢。