为什么需要ng-ng强制ng-model值?

时间:2016-03-23 20:21:32

标签: angularjs

我有以下标记:

<input id="bestCost" name="bestCost" ng-model="vm.active.bestCost" ng-required="vm.active.funded == true" />

我的控制器中有一个设置vm.active = null的方法。此值保持为null,直到有时我触发异步请求。触发请求后,Angular会触发摘要。因此,到异步承诺的成功处理程序执行时,vm.active不再为空。它是bestCost为null的对象:

Object {bestCost: null}

我的其他模板绑定都没有这样做,只是这个字段。其他表单字段与此字段之间的唯一区别是此字段具有ng-required指令。

有没有办法防止这种情况发生?我理解Angular会在用户输入表单字段/绑定时优雅地创建对象层次结构,但我真的不想要执行此操作的ng-required指令。

2 个答案:

答案 0 :(得分:0)

我想我明白你在问什么。

你可以使用这样一个事实:如果前面的那些是假的,那么&&将不会评估所有术语,而在JavaScript中(基于AngularJS表达式),使用了真值y和假y来代替严格的布尔值

ng-required="vm && vm.active && vm.active.funded == true"

此外,您可以利用ng-ifinput元素显示在DOM中(并且甚至不会评估ng-required表达式),方法是将元素包装在标记中使用ng-if - 如果必须在元素可用之前发出异步请求,这可能不是一件坏事(如果用户在异步请求完成之前与input元素交互,那么{{ 1}}将创建ng-model):

vm.active

答案 1 :(得分:0)

我认为在这种情况下有同样的问题:

<form name="activeItemForm">
   <input type="text" ng-model="activeItem.itemRef" ng-required="activeItem.type === 'product'">
   <!-- ...other controls -->
</form>

当尝试像这样(从控制器)使 activeItem 无效时:

$scope.activeItem = null;

...我只剩下 activeItem 是一个对象:

{ itemRef: null }

在整个表单中添加 ng-if 即可解决:

<form name="activeItemForm" ng-if="activeItem">