如何将ng-if作用域传递给父级作用域

3

ngIf会在父作用域内创建另一个作用域。根据Angular文档,我从这个链接中了解到,理论上它会将内部作用域传递给父作用域。但实际上并不是这样的。我需要将这个作用域的特性传递给父作用域。我该怎么做?

感谢任何帮助。


你能否创建一个最小、完整、可验证的例子 - Satpal
2
请创建一个示例,我建议使用“Controller As”并且放弃使用$scope。这将解决许多问题。 - Nick Delaney
1个回答

4

如果我理解您的问题(我尝试了),有许多方法来解决这个问题。提供了一些替代方案。

方法 1:

您可以在ng-if内部使用$parent并完成其余操作。

方法 2:

您只需要将结构修改为对象表示法,即{obj.yourval}

<body ng-app="ngAnimate" ng-init="cool.mess='Im removed';checked=true">
   <br/> : {{cool.mess}}
   <br/> Click me: <input type="checkbox" ng-model="checked" /><br/>
  Show when checked:
  <span ng-if="checked" class="animate-if">
   <input type="text" ng-model="cool.mess"/>
  </span>
</body> 

这里有一个示例可以使用链接

方法3:

您可以使用ng-hide而不是使用ng-if,它解决了所有的神秘问题(在我看来,如果您与UI重构无关,那么这将是您的好伙伴)。

附言:总之,文档清楚地说明,如果使用ng-if,它会创建一个子作用域。因此,子级可以访问父级数据,但反过来则不行。这就是为什么在父级结构中修改不会反映在父级水平上的原因。使用上述任何一种替代方案即可。


我需要在ngIf表达式为false时不编译代码,因为它会影响功能而不是UI,所以方法3不是我要找的解决方案。我无法理解方法2。这如何解决问题?另外,我对方法1也不完全满意。在ng-if中使用$parent有什么优势?谢谢。 - xxlali
通常来说,在嵌套的层级中,当你从子层级访问时,$parent会获取到父级的数据。请再次注意,我强调的是在子层级内部访问的情况,因为你知道在子作用域内,它只能访问子级别的数据。所以我们使用 $parent 来获取父级数据。#ng-if 会创建一个单独的实例(如果使用)。 - super cool
我没有时间尝试。 当我尝试时,如果这解决了我的问题,我会加标记的。别担心。 - xxlali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接