首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS -在单击时调用指令侦听器并将数据传递给它

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

Stack Overflow用户
提问于 2015-05-21 09:03:34
回答 1查看 1.2K关注 0票数 1

因此,我在使用AngularJS中的指令。我想要实现的是,在单击一个按钮时调用指令的侦听器,并从控制器传递一些数据。

这是我的指令(示例)

代码语言:javascript
复制
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

代码语言:javascript
复制
<div graph-visualization data="graphdata" val="stability">
</div>
<div>
    <input type="button" value="Call" ng-click="setData(6)" />
</div>

这是我的控制器

代码语言:javascript
复制
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呈现一个图形,并且我希望使用每次单击该按钮时发送的数据重新呈现该图形。我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-21 09:17:39

您正在传递data=“图形数据”,为什么不传递data=“数据”呢?

根据我使用角变量的经验,我发现使用子变量更有效地处理指令,对直接变量也没有。

不是:

代码语言:javascript
复制
$scope.data = val;

但是:

代码语言:javascript
复制
$scope.state = {};

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

并在html中传递state.data:

代码语言:javascript
复制
<div graph-visualization data="state.data" val="stability"></div>

您并不是要替换整个变量$scope.data的实例,而只是更新它的属性,因此,在“数据”指令中观察将引用同一个实例。

你知道我的想法:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30369139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档