假设我需要向我的网站添加一个类似于 StackExchange 提供的标签功能:我有一个输入栏,里面装满了选定的标签,当我输入一些内容时,会出现一个建议列表。很标准的东西。
我会做以下事情:
- 创建标签模块
- 添加一个标签控制器,它使用服务来获取标签,并声明像
addTag
,removeTag
,findSimilarTags
, .. 这样的方法 --> 即它使用$scope
模型数据 - 添加一个带有指定我的 Tag 模块布局的模板的指令,以及调用控制器方法的方法,例如
add()
,remove()
, ..
通过这种方式,我可以区分来自用户的事件(例如add()
内部调用addTag()
)和代码的其他部分(例如,addTag()
发生某事时内部调用的观察者)。
总之:
- 控制器:处理来自模型的数据(例如使用服务)
- 指令:处理 DOM 操作和事件,使用控制器完成实际工作
这有意义吗?为什么Google将指令与控制器完全分开?指令是否应该更加“智能”并直接处理数据?