翻译自:Best Practices
命名要发布的代码
不用担心内部代码的指令前缀,但是一旦你计划开源你的代码,其需要被命名。
ng-
前缀预留给Angular内部使用- 有目的的命名(例如:
i18n-
或者geo-
)比任意的命名(djs-
或者igor-
)好很多 - 可以使用ui-alias移除第三方前缀。
只为原子事件使用
.$broadcast()
,.$emit()
和.$on()
在整个应用程序中相关的事件(例如用户授权或者关闭应用)。如果你希望特定于模块、服务或小部件的事件,你应该考虑使用服务、指令控制器或者第三方库。$scope.$watch()
应该能满足这些需求- 注入服务和直接调用方法同样有效
- 指令间可以通过指令控制器相互交流
让用户尽可能的使用表达式
ng-href
和ng-src
支持{{}}
- 使用
$attrs.$observe()
,因为表达式是异步的,并且可能改变
通过使用指令的Controller来扩展指令
你可以把方法和属性放在指令的控制器中,通过其他的指令获取到控制器。你甚至可以通过这样来覆盖方法和属性。
给控制器和指令添加销毁代码
在指令和控制器销毁前会触发事件。这给了拆解你的插件和监听的机会,来更好的实现垃圾回收。
- 注册
$scope.$on('$destroy', ...)
事件
- 注册
恰当地利用模块
把你的代码分成相关的包,而不是横向切分你的模块,导致其不能被分解。这样的话,当你移除了一个模块,你的应用仍然可以继续工作。
- 检出angular-app/angular-app 当作一个例子
- 在多个
.config()
方法中定义路由 - 模块有自己的依赖
- 目录结构应该反应模块结构
使用NPM和Bower