2016-11-04 93 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>