我在输入标签中使用ng-model时遇到问题。我已经设置了JSFiddle,其中包含我的代码。单击“添加”,然后尝试更改下面的输入框之一时,会出现此问题。输入拒绝让您输入!
HTML:
<div ng-class="{selected: selectedPart==$index, cell: selectedPart!=$index}"
ng-click="selectPart($index)" ng-repeat="part in parts">
<textarea class="prompt" ng-model='part.wording'></textarea>
<hr>
<span class="numbering" ng-repeat="option in part.options">
{{ $index+1 }}).
<textarea class="option" ng-model="option"></textarea>
<br>
</span>
</div>
JS:
StaticEX.controller('mainController', function($scope) {
$scope.parts = [];
$scope.ps = "Problem Statement";
$scope.selectedPart = null;
$scope.newPart = function() {
return {"wording": "Prompt",
"options": ["", "", "", ""]}
};
$scope.addPart = function() {
$scope.parts.push($scope.newPart());
};
这是我如何提及“选项”的问题吗?这是为“ng-repeat”指令创建的伪变量,并且实际上并未链接到“$ scope”?还是我做了一些非常愚蠢的事情?
答案 0 :(得分:1)
至于使用1.1.5处理 Duplicates in a repeater are not allowed
,有一个简单的解决方法。几周前切换到1.1.5时,我遇到了同样的问题。
track by $ index
是ng-repeat
<span class="numbering" ng-repeat="option in part.options track by $index">
{{ $index+1 }}).
<textarea class="option" ng-model="option"></textarea>
<br>
</span>
您可以在at this blog或GitHub上阅读有关此问题Angular Google Group的一些内容。
答案 1 :(得分:0)
有时,角度无法绑定到非对象。因此,快速解决方案是制作您的选项对象。:
$scope.newPart = function() {
return {"wording": "Prompt",
"options": [{text:""}, {text:""}, {text:""}, {text:""}]}
};
然后
<input class="option" ng-model="option.text">
我认为这个特殊问题在以后的版本中得到了解决,所以请尝试使用最新版本的angular,如果它仍然不起作用,我会在github上为它提出问题。
答案 2 :(得分:0)
如果你改变了
<input class="option" ng-model="option">
要
<input class="option" ng-model="part.options[$index]">
它似乎有效,但现在你有焦点改变的问题。