构建角度应用程序是学习角度最难的事情之一。 Angular尽力模块化代码,但(html,css和javascript的当前状态)并不能真正让你将所有东西打包在一起,所以你必须找到一种适合你的方式。我通常使用我的构建系统(我使用gulp)和一个CSS预处理器(对于我来说,Stylus)来分开(但是在一起)。
我创建一个新的指令过程如下:
定义一个新的角度模块(在它自己的文件)my-albums.coffee
:
angular.module('my-albums', [])
.directive('myAlbumDirective',()->
restrict: 'A'
templateUrl: 'SomeTemplate.jade'
# etc.
)
创建玉模板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
然后,每当我导入一个角模块插入我的app.coffee
(其中包含模块导入一个长长的清单),我也进口其风格在我main.styl
样式表:
@import '../my-albums/_my-albums.styl'
当我运行我的编译系统,它(除其他外):
- 自动编译
.jade
文件到app.templates
角模块(预填充$templateCache
(app.templates
包括在进口app.coffee
- 编译并连接所有的CoffeeScript到
script.js
- 编译并连接所有手写笔的文件,其文件名不以下划线为开头
style.css
然后我的索引页里面我有两个进口:
script(src='js/app.js')
link(rel='stylesheet', href='css/style.css')
TL; DR:
有保持你的指令代码分离页面的其余部分没有简单的方法,但如果你研究构建系统和其他人的角度项目结构,你会发现你喜欢的东西。
注意 不久TM事情会更整洁(见web components和angular 2.0)
这是可悲的是一个共同的问题。 – 2014-12-02 10:53:08
为什么你需要指令中的CSS?这是否可以打包指令并将其用于其他项目? – 2014-12-02 11:01:39
@EdHinchliffe,只是为了保持一切分开?理想情况下,我想在自己的文件中指定CSS,然后让服务器将所有指令的CSS(甚至更优选只是页面上使用的CSS)合并到一个文件中,然后将其提供。 – 2014-12-02 11:06:19