AngularJS - 在单击时调用指令监听器并将数据传递给它

时间:2015-05-21 09:03:34

标签: javascript angularjs angular-directive

所以,我正在使用AngularJS中的指令。我想要实现的是通过单击按钮调用指令的监听器并从控制器传递一些数据。

这是我的指示(示例)

app.directive('graphVisualization', function() {
    var containerid = document.getElementById('left-graph-container');
    return {
        restrict: 'A',
        scope: {
          data: '=',
          val: '=',
        },
        link: function(scope, element, attrs) {
            scope.$watch('data', function(newVal, oldVal) {
                //listener code
            })
        }
    }

这是我的HTML

<div graph-visualization data="graphdata" val="stability">
</div>
<div>
    <input type="button" value="Call" ng-click="setData(6)" />
</div>

这是我的控制器

app.controller('MainCtrl', ['$scope', function() {
    $scope.graphdata = ['time1', 'time2', 'time3'];
    $scope.setData() = function(val) {
        $scope.data = val;
        //now call the directive's listener code i.e. 'link' function and pass it '$scope.data'
    }
}])

因此,我需要将$scope.data从控制器传递给指令,然后使用该数据运行link函数的代码。我在监听器代码中做的是使用D3渲染图形,我想使用每次单击按钮时发送的数据重新渲染该图形。我该怎么做?

1 个答案:

答案 0 :(得分:2)

您正在传递数据=&#34; graphdata&#34;,为什么不传输数据=&#34;数据&#34; ?

根据我对Angular的经验,我发现使用子变量更有效地使用指令,而不是使用直接变量

$scope.data = val;

但:

$scope.state = {};

$scope.setData() = function(val) {
    $scope.state.data = val;
}

并在html中传递state.data:

<div graph-visualization data="state.data" val="stability"></div>

你不是要替换整个变量$ scope.data的实例,而只是更新它的属性,所以请在指令中查看数据&#39;将引用相同的实例。

你有我的想法:)