【问题标题】:Return value from d3 angular directive to controller从 d3 角度指令返回值到控制器
【发布时间】:2015-11-18 12:42:46
【问题描述】:

我无法将数据从指令返回到控制器。我的指令具有隔离范围,根据文档,我使用'='来进行2路数据绑定,但不知何故存在一种数据绑定方式,但不是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 和 ap2Data 中,我想返回刚刚绘制的两个矩形的 ID。

我不知道这里出了什么问题。如果你能弄清楚,请告诉我。

谢谢, 卡西夫

【问题讨论】:

  • 请提供 plunkr 链接或其他内容,以便识别问题。
  • 同意您需要发布一个工作示例。这是一个相当简单的场景,所以应该会有所帮助。
  • 我实际上发现了这个问题。让我发布我的解决方案作为答案。

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


【解决方案1】:

这种行为真的很奇怪。我实际上创建了一个小测试代码,非常中肯,来测试这个问题。如果我传递复杂的数据类型,如数组、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 的任何更改都会返回给控制器。

感谢大家的调查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2015-07-07
    相关资源
    最近更新 更多