AngularJS具有相同模块名称的两个指令

时间:2013-11-19 16:49:51

标签: angularjs

是否可以使用相同的模块名称创建两个指令? 有这两个文件

angular.module('fabTemplate', [])
    .directive('fabGallery', [function () {
....

angular.module('fabTemplate', [])
    .directive('fabVideo', [function () {
...

第二条指令不会被识别。

<fab-video />

不呈现任何内容。通过更改模块名称可以工作。

AngularJS的documentation says表示参数名称(模块“方法”的第一个参数)

  

要创建或检索的模块的名称。

我想那应该工作......:S Angular不会在控制台中打印任何内容

4 个答案:

答案 0 :(得分:17)

如果要检索模块,则必须仅使用angular.module()的第一个参数。

From the docs

  

requires(可选)[Array。]:如果指定,则创建新模块。如果未指定,则检索模块以进行进一步配置。

您的代码应该是:

//Module definition:
angular.module('fabTemplate', []);

//Get the module and add the first directive:
angular.module('fabTemplate').directive('fabGallery', function () {});

//Get the module and add the second directive:
angular.module('fabTemplate').directive('fabVideo', function () {});

答案 1 :(得分:5)

它也写在文档的开头:

  

传递两个或多个参数时,会创建一个新模块。如果只传递一个参数,则检索现有模块(作为模块的第一个参数传递的名称)。

如果要检索模块,则应仅在第二次传递模块名称,而不是数组。

所以,你应该写:

angular.module('fabTemplate', [])
    .directive('fabGallery', [function () {
        ....
    }]);

angular.module('fabTemplate')
    .directive('fabVideo', [function () {
        ....
    }]);

请注意,您可以写:

angular.module('fabTemplate', [])
    .directive('fabGallery', [function () {
        ....
    }])
    .directive('fabVideo', [function () {
        ....
    }]);

或者

var fabTemplate = angular.module('fabTemplate', []);

fabTemplate.directive('fabGallery', [function () {
    ....
}]);

fabTemplate.directive('fabVideo', [function () {
    ....
}]);

答案 2 :(得分:2)

您可以在一个模块中拥有多个指令。

angular.module('myModule', []).directive('first', function() {
angular.module('myModule').directive('second', function() {

您必须确保第一个声明中的方括号不在其他声明中。请参阅此帖:AngularJS module.directive not responding consistently

答案 3 :(得分:1)

根据您链接的文档,当您将第二个参数添加到module方法时,它会明确地调用模块的创建,而不是检索;实际上,这个参数是可选的,所以当你只想检索现有的模块时,你应该可以这样做:

angular.module('fabTemplate')
    .directive('fabVideo', [function () {