以下是一些有效的代码(瞥了一眼就足够了):
<div ng-repeat = "n in lotteryNumbers" ng-if="doShowExample">
<input type="text" value = "{{lotteryNumbers[n]}}"></input>
</div>
<script>
angular.module('app', [])
.controller('testCtrl', function($scope) {
$scope.doShowExample = true;
$scope.lotteryNumbers = [1,2,3,4,5,6,7,8,9,10];
});
</script>
我们在这里看到两个属性已赋值:
ng-if="doShowExample"
和
value = "{{lotteryNumbers[n]}}"
我并不真正理解一个属性的价值背后的逻辑需要被置于花括号(ng-model)中而另一个属性被束缚。为什么它有时会自动知道您正在寻找变量而不是显式值?
Plnkr如果你想要它,但没有什么有趣的。就在这里,万一我错了,你想告诉我如何。
答案 0 :(得分:4)
那是因为value
不是角度指令,但它只是元素的一个属性,可以赋值,它不知道角度表达式是什么。因此,在表达式上提供插值(&#39; {{...}}&#39;)会导致将表达式的结果赋值给文本框的值。但是你很少需要这样做,如果你需要提供价值,你也可以使用角度指令ng-value
。
<input type="text" ng-value= "lotteryNumbers[n]"></input>
但是大多数情况下你需要ng-model
进行双向绑定。
<input type="text" ng-model= "lotteryNumbers[n]"></input>
所以简而言之
{{AngularExpression_XYZ}} - &gt; AngularExpression_XYZ的值
当你看到一个期望表达式的angular指令时,你需要提供表达式本身,对于ex - ng-if, ng-repeat, ng-show
以及更多......但是如果你看到某些东西取值例如:{{ 1}}你需要为它提供一些值,你可以通过插值来实现它。
现在来看你的示例中的内容你做错了ng-attr-x
来自你的案例中的ng-repeat表达式(lotteryNumbers[n]
)中的n
不是索引但它本身就是价值。但是,由于你有数组,并且你希望"n in lotteryNumbers"
能够正确使用ng-repeat数组,你可能会尝试使用ng-model
而且你需要使用track by expression本身,因为它最终会在数组更新时失去对文本框的关注。
$index
但在真实用例中,你应该尽量避免这种情况并将其绑定到对象数组,以避免出现此类问题。
答案 1 :(得分:1)
在你的例子中
ng-if
是一个将范围变量传递给。
的角度指令value
是标准的html属性 - &gt;它不能接受范围变量。它只能处理“值”,因此您必须使用{{var}}。