为什么ng-hide不适用于自定义指令?

jav*_*ier 9 angularjs angularjs-directive

我正在阅读angularjs.org上的开发人员指南的指令部分,以更新我的知识并获得一些见解,我试图运行其中一个示例,但指令ng-hide不适用于自定义指令.

这里是jsfiddle:http://jsfiddle.net/D3Nsk/:

<my-dialog ng-hide="dialogIsHidden" on-close="hideDialog()">
  Does Not Work Here!!!
</my-dialog>
<div ng-hide="dialogIsHidden">
       It works Here.
</div>
Run Code Online (Sandbox Code Playgroud)

对于为什么会发生这种情况的任何想法?

看来标签上的变量dialogIsHidden已经引用了指令内的范围变量而不是控制器中的变量; 鉴于该指令具有自己的曝光范围,为了使这项工作,必须通过引用将控制器的变量dialogIsHidden传递给指令.

这里是jsfiddle:http: //jsfiddle.net/h7xvA/

变化:

 <my-dialog 
     ng-hide="dialogIsHidden" 
     on-close="hideDialog()" dialog-is-hidden='dialogIsHidden'>
Run Code Online (Sandbox Code Playgroud)

和:

  scope: {
    'close': '&onClose',
    'dialogIsHidden': '='
  },
Run Code Online (Sandbox Code Playgroud)

hug*_*ige 9

在将对象指向范围时,您将在指令内创建一个隔离的范围.这就是为什么$ scope.dialogIsHidden没有传递给指令,因此元素没有被隐藏.

Kain建议使用$ parent调整小提琴,这说明了这一点.


小智 8

你可以改变

 <my-dialog ng-hide="dialogIsHidden" on-close="hideDialog()">
Run Code Online (Sandbox Code Playgroud)

 <my-dialog ng-hide="$parent.dialogIsHidden" on-close="hideDialog()">
Run Code Online (Sandbox Code Playgroud)