目前我有以下HTML:
<div ng-controller="WaitForViewCtrl">
<div ng-if="show">
...
</div>
</div>
WaitForViewCtrl
控制器监视$scope.currentUser
并监听$routeChangeSuccess
事件,并根据这两组$scope.show
变量的状态true
/ {{1} }。这是它的代码https://gist.github.com/szimek/6070c04be07900c87000。
我想将其更改为指令,以便它看起来像:
false
几个问题:
是否有任何理由将其更改为指令,或者将其保存在控制器中是否更好?如果是这样,如何编写这样的指令?
指令是否有可能具有单独的范围,因此它不会使用自己的变量(如<div wait-for-view>
...
</div>
)污染其他范围?或者指令根本不需要修改范围?
如果我在很多地方使用这个指令,观察者和听众只会被触发一次所有指令(最好)或每个指令一次?
答案 0 :(得分:4)
是否有任何理由将其更改为指令,或者将其保存在控制器中是否更好?如果是这样,如何编写这样的指令?
在我看来,只要你想以声明的方式封装和/或重用行为,指令就很有用。如果你发现自己一遍又一遍地做同样的事情,那么我认为指令是有道理的。您需要使用transclusion,以获取指令中托管的内部内容。对于一个非常简单的概念,这是一个花哨的(通常是令人生畏的)名称。
指令是否有可能具有单独的范围,因此它不会使用自己的变量(例如show)污染其他范围?或者指令根本不需要修改范围?
事实上。指令可以(通常应该)具有isolate scope。赋予指令隔离范围允许它写入它定义为指令用户的接口的值。
如果我在很多地方使用这个指令,观察者和听众只会被触发一次所有指令(最好)或每个指令一次?
指令具有实例行为(基于范围和元素),所以是的,每个指令都会单独监视/触发。