2016-11-04 49 views
0

我有一个项目列表,其中一些具有属性值,一些具有属性默认值。我需要用ng-repeat将它绑定到输入[文本]中。
阵是样子:'或','和'in ng-model angularjs

$scope.arr = [ 
{value:'name'}, 
{value:'dog'}, 
{default:'cat'}, 
{value:'lastName'}, 
{default:'ring'} 
]; 

,而在HTML:

<div ng-repeat='item in arr'> 
<input type='text' ng-model='item.value || item.default'> 
</div> 

它的工作原理,但我在控制台错误消息 “[ngModel:nonassign] http://errors.angularjs.org/1.5.8/ngModel/nonassign?p0=item.value%20%7C%7CNaNtem.default&p1=%3Cinput%20type%3D%22text%22%20ng-model%3D%item.value%20%7C%7C%item.default%22%20class%3D%22ng-pristine%20ng-untouched%20ng-valid%22%3E”。因为ng-model不适用于表达式。 也许有另一种解决方法吗?

Plnkr example

回答

4

你可以这样来做:

<div ng-repeat='item in arr'> 
    <input type='text' ng-hide='item.default' ng-model='item.value'> 
    <input type='text' ng-show='item.default' ng-model='item.default'> 
</div> 

Plunker example

+0

THX!这是个好主意,但是当value =''(空)时,ng-show会隐藏这个字段。所以也许我需要做一些检查,比如'ng-show ='fieldCheck(item)'','$ scope.fieldCheck = function(item){if('value'in item)return true}' - 例如。 。 – YoroDiallo

+0

@YoroDiallo等一下,你有兴趣展示这两个领域?你期望的最终结果是什么? –

+0

是的,我需要将所有对象粘贴到输入中。数组中的每个对象都有默认值或值属性,它可以是空的或有一些值,但我需要将它绑定到输入中。所以当'value ='''我可以从输入中填充它(在输入中写入某些东西) – YoroDiallo

0

您可以尝试创建第二个数组,仅使用单一类型的对象并将其绑定到视图。 然后,您可以观察更改并将值重新分配给原始数组。 它更多的是MVVM方法(创建一个“viewModel”),介于控制器模型和视图之间。

0

$scope.valueOrDefault = function (item){ return item.value|| item.default; }

和HTML

<div ng-repeat='item in arr'> <input type='text' ng-model='valueOrDefault(item)'> </div>