2013-12-16 33 views
24

我想一个指令分离到另一个文件上,而不需要声明一个新的模块 - 不这样做:Angularjs - 分离指令文件,但住在同一个模块

angular.module('myapp.newmodule',[]).directive 

只是:

angular.module(“myapp.directives”)指令(“”

的myapp.directives模块存在于另一个文件,并运行良好。但是当我尝试在另一个文件中使用它,如上图所示(不[] )它失败了。

以下this answer它认为我的方法应该可行,但由于某种原因失败..

回答

21

当你第一次声明一个模块时,它需要有依赖参数。之后,您可以仅使用模块名称参数引用相同的模块。

/* create module */ 
angular.module('myapp.newmodule',['ngRoute','ngResource']); 

/* declare components of same module, note same name*/ 
angular.module('myapp.newmodule').directive.... 

如果你想创建新的模块,你需要的主要ng-app模块依赖关系注入其中。

/* main ng-app module , injects another module you created below*/ 
angular.module('myapp.newmodule',['ngRoute','ngResource','myUploader']); 

/* new module, must have dependency argument */ 
angular.module('myUploader',[]).directive... 
+0

嗯,多数民众赞成什么是不工作..我做'''angular.module( 'myapp.newmodule')。指令''',它失败,注射错误而在另一个文件中'''angular.module('myapp.newmodule',[])。directive'''已经工作。宣布等。 – alonisser

+3

你是否按错误的顺序加载文件? – charlietfl

+0

点!这是问题,谢谢@charliefl – alonisser

5

你不需要链在一起,你发布的链接有在这个问题底部的答案。

在您需要创建您的应用程序模块的第一个文件:

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

然后在每个文件可以附加额外的东西myApp

myApp.directive('ngValidate', ['$parse', function ($parse) { 
    .... 
}]); 

个人而言,我从来没有在一起连锁这个东西,相反,我把它放在单独的文件中。

11

无论它只是指模块名称(即使在不同的文件中)并附加指令。 JavaScript只会看到附加到模块的内容,而不会看到它来自哪个文件。

file1.js

angular.module('module-name') 
    .directive('directive1', function() { 
     return { 
      .... 
     }; 
    }); 

file2.js

angular.module('module-name') 
    .directive('directive2', function() { 
     return { 
      .... 
     }; 
    }); 

唯一的一点是不要忘记包括在查看HTML文件中的js文件。 说 的index.html

<script src="file1.js"></script> 
<script src="file2.js"></script> 
+3

这个工程!但请注意,仅在一个文件(主应用程序文件)中使用括号来表示依赖性文件1: angular.module('module-name',[])... file2: angular.module('module-name “)... 否则它不起作用。 – Ruwen