【问题标题】:Ng-include: access child modelsng-include:访问子模型
【发布时间】:2014-10-18 16:06:46
【问题描述】:

我有一个模板,我想在我的应用程序的许多部分中使用它。 该模板包含分配了模型的选择框。

我通过ng-include 包含模板。

<span ng-include="'templateWorking'" ng-init="selectModel=data.field"></span>

然后在模板中:

<script type="text/ng-template" id="templateWorking">
   <select ng-model="selectModel">
  <option value="Test1">Test1</option>
  <option value="Test2">Test2</option>
</select>

当然,它不起作用,因为ng-include 创建了一个新的子作用域。 当我使用一个模型(在data.model 等模型中使用点.)时,它可以工作。

但是在这种特殊情况下怎么可能,所以我可以在不同的控制器中将此模板与不同的模型一起使用? 此外,我需要动态地将处理程序附加到select(例如 ng-change="doSmth()")。

提前致谢。

供参考: http://plnkr.co/edit/NiLQyVQGb6X1mA0sVvA1?p=preview

【问题讨论】:

  • 通常,如果您需要可重用性,最好创建一个指令。您将完全控制范围。

标签: javascript angularjs angularjs-scope angularjs-ng-include angularjs-ng-init


【解决方案1】:

在这种情况下,最好使用指令。您可以使用onloadng-include 进行一些控制,但如果这还不够,最好使用指令。

参考:Difference between onLoad and ng-init in angular

【讨论】:

  • 很遗憾,这与问题无关。问题的根源在于无论使用 ng-init 还是 onLoad , ng-include 都会创建一个新的子作用域。所以我想知道如何处理它。你可以看看上面的plunk。我更新了。
  • 好的。我更明白你在追求什么。让我想一想。 :)
  • 也许这不是您正在寻找的答案,但我只会将模板推送到指令中。这将使您能够更好地控制范围,并可能使其更易于维护。
  • 经过一些额外的挖掘之后,似乎没有办法让它与 ng-include 一起工作,所以,是的,你是对的。指令似乎是实现期望的唯一可能方式。谢谢。
  • 好的。我重写了答案以反映这一点。谢谢。 :)
猜你喜欢
  • 2016-10-03
  • 2016-02-28
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多