2014-09-03 24 views
0

这是我的模型:保存键,模式的价值没有得到保存在范围和重复输入字段

{ aktuell: { N5: '8', Auftragsnr: 123 }, 
    historie: 
    [ 
    { some data }, 
    { more data } 
    ] 
}; 

我有这样的HTML代码:

<ul> 
<li> 
     <span ng-repeat="(key, value) in friends[0].aktuell" ng-show="key != '_id' && key != '__v'"> 
      {{key}}  
     </span> 
</li> 
<br> 
<li ng-repeat="friend in friends"> 
     <span ng-repeat="(key, value) in friend.aktuell" ng-show="key != '_id' && key != '__v'"> 
      <input type="text" ng-model="value"> 
     </span> 
     <button ng-click="save(friend)" class="btn btn-primary">Save</button> 
    </li> 
    </ul> 

会发生什么:

当我点击保存时,控制器会被正确触发(并执行API请求等),但是任何输入到输入字段的新值都不会保存在朋友mo中del(范围)。我试过铬Batarang,然后输入一个值新的输入字段时,范围不发生变化,见截图:

enter image description here

预期的行为:

预期的行为是保存新“朋友模型”的“aktuell”成员中的“N5”值。

更新:固定的同时, “双输入” 栏错误

回答

2

试试这个

<li ng-repeat="friend in friends"> 
     <span ng-repeat="(key, value) in friend.aktuell" ng-show="key != '_id' && key != '__v'"> 
      <input type="text" ng-model="friend.aktuell[key]"> 
     </span> 
     <button ng-click="save(friend)" class="btn btn-primary">Save</button> 
    </li> 
+0

由于@ dhavalcengg的回答指出,您需要指定“值”在朋友对象中的位置。所以在你的例子中,你需要ng-model =“friend.akuell ['N5']”在你的输入 – catalyst294 2014-09-03 15:30:58

+0

@ catalyst294上如果你这样做,它会被硬编码..我们不希望这.. :) :) – dhavalcengg 2014-09-03 15:33:34

+0

我并不是建议硬编码它,只是试图用问题中的示例回答一些解释。 – catalyst294 2014-09-03 15:43:49

0

变化ng-model="value"friend.aktuell[key]

变量value未引用 '8'你的“friend.aktuell”对象中的“N5”,而是它的“副本”,因为'8'或'123'或'test'是一个字符串/数字(不可变的原语),而不是对象(可变对象)。

对不可变原语的赋值不是引用(在Javascript中,字符串也被认为是不可变的原语)。

keyvalue是范围变量时,你每次重复项(span在你的例子)得到它自己的范围内使用ng-repeat该角内部创建。

为了说明,假设ng-repeat简单地将执行以下操作,

for (var k in friend.aktuell) { 
    if (friend.aktuell.hasOwnProperty(k)) { 
    var key = k; 
    var value = friend.aktuell[k]; 
    } 
} 

这里修改value将更新friend.aktuell[k]仅当friend.aktuell[k]是可变对象。