在具有单独范围的其他指令中使用ng-if

时间:2013-12-03 11:03:25

标签: javascript angularjs angularjs-directive angularjs-controller

目前我有以下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> )污染其他范围?或者指令根本不需要修改范围?

如果我在很多地方使用这个指令,观察者和听众只会被触发一次所有指令(最好)或每个指令一次?

1 个答案:

答案 0 :(得分:4)

  

是否有任何理由将其更改为指令,或者将其保存在控制器中是否更好?如果是这样,如何编写这样的指令?

在我看来,只要你想以声明的方式封装和/或重用行为,指令就很有用。如果你发现自己一遍又一遍地做同样的事情,那么我认为指令是有道理的。您需要使用transclusion,以获取指令中托管的内部内容。对于一个非常简单的概念,这是一个花哨的(通常是令人生畏的)名称。

  

指令是否有可能具有单独的范围,因此它不会使用自己的变量(例如show)污染其他范围?或者指令根本不需要修改范围?

事实上。指令可以(通常应该)具有isolate scope。赋予指令隔离范围允许它写入它定义为指令用户的接口的值。

  

如果我在很多地方使用这个指令,观察者和听众只会被触发一次所有指令(最好)或每个指令一次?

指令具有实例行为(基于范围和元素),所以是的,每个指令都会单独监视/触发。