【发布时间】:2014-11-28 03:08:30
【问题描述】:
我无法迭代我正在更新的模型的值。我有以下控制器
app.controller('VariantsController', ['$http', function($http){
var ctrl = this;
this.cars = []; // I get the cars eventually ...
this.selected_car = null;
this.selectCar = function(car){
ctrl.selected_car = car;
}
当用户点击网页上的“汽车”时,我会更新控制器的selected_car。页面会适当更新以显示所选汽车的名称,但 ng-repeat 不会遍历 selected_car 的属性。
以下是相关的html(variants是控制器的别名):
<div ng-show="variants.selected_car">
<h6>{{variants.selected_car.name}}</h6> <!-- Updates without problem -->
<table class="table">
<tr ng-repeat="(key,val) in variants.selected_car.specs"> <!-- Problem! Does not iterate -->
<td>{{key}}</td>
<td>{{val}}</td>
</tr>
</table>
</div>
我对此进行了调查:AngularJS: ng-repeat list is not updated when a model element is spliced from the model array 但接受的答案是“每当您在 angularjs 之外进行某种形式的操作时......”。在这种情况下,我正在从控制器内更新模型,所以它不应该是一个问题。另外,如果我没有明确使用$scope,在这种情况下我将如何使用$apply?
selected_car.specs 是一个有很多键的对象:
{
...
mileage: 13.53,
mileage_city: 23,
mileage_highway: 32,
power: 220,
...
}
Plunker(@Phil 提供):http://plnkr.co/edit/ULSr2Tk5D7phTYW0t7Ys?p=preview
【问题讨论】:
-
您对注入 $scope 并将 var 附加到 $scope.selected_car 的反感是什么?会解决你的问题。
-
好吧,我得修改很多代码。
-
如果它不起作用,你将不得不更改代码......
-
@JamesKleeh 好的。让我很快地制作一个小提琴。
-
为你做了一个,虽然效果很好~plnkr.co/edit/Mhkud6jIs3FUxvPNYHiV?p=preview
标签: javascript angularjs