在学习Angular时,构建一个Angular应用程序是最困难的事情之一。Angular试图将代码模块化,但(当前状态下的)HTML、CSS和JavaScript并不能真正地让你将它们打包在一起,所以你必须找到适合自己的方法。
我通常使用我的构建系统(我使用gulp)和CSS预处理器(对我来说是Stylus)来保持事物的分离(但又在一起)。
我创建新指令的过程如下:
定义一个新的Angular模块(在其自己的文件中)
my-albums.coffee
:
```
angular.module('my-albums', [])
.directive('myAlbumDirective', ()=>
restrict: 'A'
templateUrl: 'SomeTemplate.jade'
# etc.
)
```
创建一个jade模板
my-album-directive.jade
```
.album
img(ng-src="{{album.imageUrl}})
span.name {{album.name}}
```
使用与模块同名前缀下划线的样式文件来创建
_my-albums.styl
。在这里我将包含模块特定的CSS。
```
[myAlbumDirective]
.album
display flex
flex-direction column
@media screen and (min-width: 600px)
flex-direction row
```
然后,每当我将一个Angular模块导入到我的app.coffee
中(其中包含一长串的模块导入),我也会在我的main.styl
样式表中导入它的样式:
@import '../my-albums/_my-albums.styl'
当我运行我的构建系统时,它(除其他事项外):
- 自动将
.jade
文件编译成一个app.templates
angular模块(预填充$templateCache
)(app.templates
已包含在app.coffee
的导入中)
- 将所有coffeescript编译并连接到
script.js
中
- 将所有文件名不以下划线开头的stylus文件编译并连接到
style.css
中
然后在我的索引页面中,我只有两个导入:
script(src='js/app.js')
link(rel='stylesheet', href='css/style.css')
TL;DR:
没有简单的方法将指令代码与页面的其余部分分开,但如果您研究构建系统和其他人的Angular项目结构,您会找到自己喜欢的东西。
注意
很快TM事情会变得更加整洁(请参见Web组件和Angular 2.0)