它是什么(请参阅jQuery的清晰定义作为示例)?
指令本质上是一个函数†,当Angular编译器在DOM中找到它时执行。函数几乎可以执行任何操作,这就是为什么我认为定义指令是相当困难的原因。每个指令都有一个名称(如ng-repeat,tabs,make-up-your-own),每个指令都确定可以在哪里使用它:元素,属性,类,注释中。
†指令通常仅具有(后)链接功能。复杂的指令可以具有编译功能,预链接功能和后链接功能。
打算解决哪些实际问题和情况?
指令可以做的最强大的事情就是扩展HTML。您的扩展名是用于构建应用程序的领域特定语言(DSL)。例如,如果您的应用程序运行在线购物网站,则可以将HTML扩展为具有“购物车”,“优惠券”,“特殊商品”等指令-在“在线购物”域,而不是“ div”和“ span”域(如@WTK所述)。
指令还可以将HTML组件化-将一堆HTML分组为一些可重用的组件。如果您发现自己使用ng-include引入了大量HTML,则可能是时候重构为指令了。
它体现了什么设计模式,或者它如何适应angularjs所谓的MVC / MVW任务
指令是您操作DOM并捕获DOM事件的地方。这就是指令的compile和link函数都将“ element”作为参数接收的原因。您可以
- 定义一堆HTML(即模板)来替换指令
- 将事件绑定到此元素(或其子元素)
- 添加/删除课程
- 更改text()值
- 监视在同一元素中定义的属性的更改(实际上是监视的属性的值-这些是作用域属性,因此该指令监视“模型”的更改)
- 等等
在HTML中,我们有类似的事情
<a href="...">
,
<img src="...">
,
<br>
,
<table><tr><th>
。您将如何描述a,href,img,src,br,br,table,tr和th是什么?这就是指令。