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

标签 javascript angularjs angular-directive

所以,我在 AngularJS 中使用指令。我想要实现的是在单击按钮时调用指令的监听器,并从 Controller 向它传递一些数据。

这是我的指令(示例)

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>

这是我的 Controller

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 从 Controller 传递到指令,然后使用该数据运行 link 函数的代码。我在监听器代码中所做的是使用 D3 渲染图形,我想使用每次单击按钮时发送的数据重新渲染该图形。我该怎么做?

最佳答案

你传递的是 data="graphdata",为什么不是 data="data"?

根据我使用 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 的实例,而只是更新它的属性,因此 watch in 指令中的 'data' 将引用同一个实例。

你明白我的意思了:)

关于javascript - AngularJS - 单击时调用指令的监听器并将数据传递给它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30369139/

相关文章:

angularjs - Spring Boot Azure AD Bearer header 身份验证(签名 JWT 被拒绝 : Invalid signature)

javascript - 使用 ng-options 而不是 DataSource 的 Kendo 下拉列表

javascript - es6中如何解析函数参数名称

javascript - 条形图的子集序数域

javascript - 如果 jquery 饼图中的数据为零,则隐藏图例标签

javascript - 如何使数组相加?

javascript - 找不到模块 '../build/Release/bson' ] 代码 : 'MODULE_NOT_FOUND' } js-bson: Failed to load c++ bson extension, 使用纯 JS 版本

javascript - Angular 一次请求页面上的三个部分

javascript - 如何将对象发送到复选框上的 Angular Directive(指令)

javascript - 如果 bool 值在没有 $watch 的情况下发生变化,是否可以将 bool 值传递给指令并触发某些内容?