为啥在使用 d3 创建 AngularJS 指令时使用 element[0] 而不是 element?

Posted

技术标签:

【中文标题】为啥在使用 d3 创建 AngularJS 指令时使用 element[0] 而不是 element?【英文标题】:Why use element[0] instead of element when creating AngularJS directive with d3?为什么在使用 d3 创建 AngularJS 指令时使用 element[0] 而不是 element? 【发布时间】:2014-04-15 18:08:46 【问题描述】:

在使用 D3 创建指令时,您似乎必须使用element[0],例如,如下所示:

app.directive('firstTry', function () 
    function link(scope, element, attrs) 
        var sampleSVG = d3.select(element[0])
        ...

那么,为什么是element[0] 而不是elementelement 这个名字暗示它是一个单一的对象而不是一个数组,但显然情况并非如此。另一个问题:这个element 还有什么?

顺便说一句,任何有关此事的官方参考资料都会有很大帮助。

非常感谢。

【问题讨论】:

console.dir(element) 应该已经为您提供了更多信息。 【参考方案1】:

想要修改 DOM 的指令通常使用 link 选项。 link 采用具有以下签名的函数 function link(scope, element, attrs) ... 其中:

scope 是一个 Angular 范围对象。 element 是该指令匹配的 jqLit​​e 包装元素。 attrs 是一个哈希对象,具有规范化属性名称的键值对及其对应的属性值。

您可以在文档 here 中找到它。所以要键入 htmlElement 实体 - 获取集合的第一个成员

【讨论】:

以上是关于为啥在使用 d3 创建 AngularJS 指令时使用 element[0] 而不是 element?的主要内容,如果未能解决你的问题,请参考以下文章

D3.js 4 与 AngularJS 1.5(组件或指令?)

D3JS 的 AngularJS 指令是不是存在?

为啥我应该在 AngularJS 中使用隔离范围指令?

AngularJS指令没有被调用

使用 AngularJs 和 D3.js 从 svg 元素调用自定义函数

为啥我不能在angularjs中以两种方式绑定指令组件具有相同的名称?