【问题标题】:How to let Angular JS ng-init only under certain condition?如何仅在特定条件下让 Angular JS ng-init?
【发布时间】:2015-04-17 02:30:54
【问题描述】:

假设我有以下简短的输入表单:

<form ng-controller="parentController" action="testing.php" method="post">
    <input name="parentInputField" ng-model="x">
    <div ng-controller="childController">
        <div ng-repeat="item in itemList">
            <input name="childInputField[]" ng-model="x">
        </div>
    </div>
</form>

您可能已经知道,childController 中的模型 x 将跟随 parentController 中模型 x 的值,直到用户在 childController 输入字段中输入内容,因此用户可以简单地更改 parent 中的值以进行批量输入和然后微调孩子。

现在,在用户提交表单后,我想调用同一个表单进行编辑功能。为了在新项目上保留批量输入功能,有没有办法只有在有以前的值时才能在 childController 中 ng-init 模型 x?

【问题讨论】:

  • 您可能希望查看 $pristine 并在满足您的条件时以编程方式设置它。您的场景不是 100% 清楚,它可能有助于创建 JSBin 或其他东西。

标签: javascript angularjs angularjs-ng-init


【解决方案1】:

尚未尝试,但我相信您可以通过以下方式实现:

<div ng-init="ctrl.value && (ctrl.value=1)">

但是如果你想要一个建议,避免像这样的 ng-init 和嵌套控制器:维护这个程序会很痛苦。更喜欢使用controllerAs 语法(https://docs.angularjs.org/api/ng/directive/ngController)并将初始化逻辑放在控制器/服务上。

【讨论】:

  • 感谢您的建议,但如果我想保留批量输入功能,则必须使用相同的型号名称。如何使用相同的模型名称启动单个值?
  • 另外,您的解决方案似乎无法在没有旧数据的输入字段上保留批量编辑功能。
猜你喜欢
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
相关资源
最近更新 更多