AngularJS指令没有被调用

Posted

技术标签:

【中文标题】AngularJS指令没有被调用【英文标题】:AngularJS directive not being called 【发布时间】:2014-07-31 19:55:02 【问题描述】:

我正在尝试在 Angular 中实现 d3 指令,这很困难,因为视觉上什么都没有发生,控制台上也没有抛出任何错误。

这是我的 d3 指令:

myApp.directive('d3-bars', ['d3Service', function($window, d3Service) 
  return 
    restrict: 'EA',
    scope: ,
    link: function(scope, element, attrs) 

// More code below ....

这是我的 html

<d3-bars bar- bar-padding="5"></d3-bars>

起初我以为它没有附加svg,因为检查它看起来的元素,但现在我认为该指令甚至根本没有运行。我一开始就在里面贴了一个console.log,它也没有出现。我错过了一些简单的东西吗?

编辑:

我尝试将第一行更改为

angular.module('myApp.directives', ['d3'])
.directive('d3-bars', ['d3Service', function($window, d3Service) 

但这也没有用。我什至不知道这两个标题之间有什么区别......

【问题讨论】:

这会给你一个错误,因为如果你只在依赖注入数组中注入'd3Service'而不是同时注入 ['$window', 'd3Service' , function($window, d3Service) //代码等] ^^ 完美。您的回答加上 Engima 的效果很好。 【参考方案1】:

您的指令名称可能有误。 Angular 指令通常是驼峰式的。当在 HTML 中时,它们会被炒作。所以ngClass 在 HTML 中变成了ng-class

至少当我尝试在我的指令中使用 - 或其他字符时,它没有起作用。

查看此 Google 群组帖子的有效性:using dash in directive

这里还有文档:Directives - matching directives

您还需要做出 JoshSGman 在 cmets 中建议的更改:

.directive('d3Bars',['$window', 'd3Service', function($window, d3Service) 

【讨论】:

哦...现在我得到“无法读取链接未定义的属性 'd3'”。一个错误...呜呼! 您可能还需要做出@JoshSGman 建议的更改。 如果您编辑您的答案以归因于@JoshSGman 的评论,我会选择此作为正确答案。 这立即帮助了我,与我引用的 Plunkr 示例相比,我与这个问题斗争了一个小时,然后才意识到我执行指令的方式存在根本性错误。谢谢。 我真的很想知道为什么它不起作用。所以,我将我的指令精简到最低限度,但仍然没有运气。然后我找到了你的答案! :) 非常感谢! :)【参考方案2】:

你的指令的命名是个问题。 Angular 在将 html 中的指令名称与 javascript 中的名称匹配之前,会对其名称进行规范化。标准化过程分两步进行:

    从元素/属性的前面去除 x- 和 data-。 将冒号、连字符或下划线分隔的名称转换为驼峰式。

因此,您的指令在 JavaScript 中的正确名称应该是 d3Bars。将其更改为该值,它应该可以工作。

更多信息请参见https://docs.angularjs.org/guide/directive#matching-directives。

【讨论】:

【参考方案3】:

当我忘记定义 link 属性时,我也有类似的行为。

控制台没有错误,没什么。

【讨论】:

【参考方案4】:

发生在我身上的另一件事使该指令根本不起作用

当你有one module 有一个指令和you created a new module 有一个新指令但由于复制粘贴you forget change Module name,这样AngulerJs 不知何故will remove the first directive

所以

确保每个模块都有唯一的名称

【讨论】:

以上是关于AngularJS指令没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

angularJS指令系统---Directive

AngularJS指令-使用指令时ng-click不起作用

angularJS进阶阶段

Angularjs:Javascript函数中没有指令内容

angularjs之$timeout指令

AngularJS $location 不改变路径