我无法迭代我正在更新的模型的值。我有以下控制器
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之外做某种形式的操作时......”。在这种情况下,我正在从控制器内更新模型,所以它不应该是一个问题。另外,当我没有明确使用$apply
时,如何在这种情况下使用$scope
?
selected_car.specs
是一个有很多键的对象:
{
...
mileage: 13.53,
mileage_city: 23,
mileage_highway: 32,
power: 220,
...
}
Plunker(@Phil礼貌):http://plnkr.co/edit/ULSr2Tk5D7phTYW0t7Ys?p=preview
答案 0 :(得分:1)
检查您的数据是否正确。访问对象可能有问题。尝试打印您的对象variants.selected_car.specs。我为演示创建了一个plunker来打印键值表。
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="angular.js@1.3.x" src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.4/angular.min.js" data-semver="1.3.4"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<p>Hello {{name}}!</p>
<table>
<tr ng-repeat="(key, val) in {name:'John', age:25, gender:'boy'}">
<td>{{key}}</td>
<td>{{val}}</td>
</tr>
</table>
</body>
</html>
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
$scope.obj={name:'John', age:25, gender:'boy'}
});
答案 1 :(得分:1)
啊哈,它的长度&#34;!
我认为ng-repeat
尝试使用length
属性进行迭代,以及你的长度&#34;属性导致它不正确地迭代或根本不迭代。
要解决此问题,我要选择其他属性名称。也许&#34; body_length&#34;或类似的东西。