范围。$ watch在控制器中的数据之后运行的angular指令

时间:2016-06-09 02:43:13

标签: javascript html angularjs d3.js angularjs-directive

我有一个读取一些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之前。

我错过了什么?

提前致谢。

0 个答案:

没有答案