从d3角度指令返回到控制器的值

时间:2015-11-18 12:42:46

标签: angularjs d3.js directive 2-way-object-databinding

我无法将数据从指令返回到控制器。我的指令是使用隔离范围,我根据文档使用'='来进行双向数据绑定,但不知何故,有一种方式是数据绑定,但不是2种方式。我对指令数据的更改不会被推回控制器。 一些代码段:

controller
========
$scope.ap1 = "1111";
$scope.ap2 = "1111";

html
=======
<d3-zones
    ng-if="vzones"
    zone-data="vzones"
    ap1-data="ap1"
    ap2-data="ap2">
</d3-zones>

directive
========
scope: {
 zoneData: '=zoneData',
 ap1Data: '=ap1Data',
 ap2Data: '=ap2Data'
},
And later in the link function, i am updating these two values on a particular event like this:
scope.$apply(function() {
    scope.ap1Data = somevalue;
    scope.ap2Data = somevalue;
});

在我的指令中,我使用d3绘制一些矩形。在ap1Data&amp; ap2Data我想返回刚刚绘制的两个矩形的ID。

我不知道这里发生了什么错误。如果你能搞清楚,请告诉我。

谢谢, 卡希夫

1 个答案:

答案 0 :(得分:0)

这种行为真的很奇怪。我实际上创建了一个小测试代码,非常重要,以测试这个问题。如果我传递复杂的数据类型,如数组,json或对象,它工作正常但不知何故它不能使用原始数据类型,如数字,null或字符串。所以我所做的是,我刚用一个数据对象替换了我的两个变量,如:

controller
========
$scope.dataModel {
    ap1: "1111"
    ap2: "2222"
}

html
=======
<d3-zones
    ng-if="vzones"
    zone-data="vzones"
    ap1-data="dataModel.ap1"
    ap2-data="dataModel.ap2">
</d3-zones>

directive
========
scope: {
 zoneData: '=zoneData',
 ap1Data: '=ap1Data',
 ap2Data: '=ap2Data'
},
And later in the link function, i am updating these two values on a particular event like this:
scope.$apply(function() {
    scope.ap1Data = somevalue;
    scope.ap2Data = somevalue;
});

然后将此dataModel传递给上面给出的指令。现在它工作正常。对此datModel的任何更改都将返回给控制器。

谢谢大家调查。