在angularJS中,当尝试从另一个范围变量的值分配范围变量时,派生变量的值为空。在这个例子中,我希望有一个汽车的范围参考,以及一个特定的汽车零件(可能会在应用程序的后期更改)。
示例:
$scope.car = Car.get(); //async http service that returns a JSON car object
$scope.selectedCarPart = $scope.car.brakes;
HTML:
<div>{{car.engine}} - {{selectedCarPart}}</div>
输出:
v8 -
为什么 selectedCarPart 为空?
答案 0 :(得分:1)
我认为您get
来电是异步的,所以当您分配selectedCarPart
时,您的$scope.car
目前为空,而且还没有brakes
。< / p>
您必须等待get
调用结束,并在http
服务的成功回调中分配生成的JSON汽车对象的值。
答案 1 :(得分:0)
即使 工作,我认为还有更好的方法。
<div>{{car.engine}} - {{car[selectedPartKey]}}</div>
这样,您只需将selectedPartKey
的值更改为'brakes'
即可。你的方式,如果car
的值发生变化,它就不会被反映出来......
答案 2 :(得分:0)
Apercu接受的回答是正确的。您还可以使用更通用的解决方案,即使用$ watch。在这种情况下,你写这个:
$scope.$watch('car',function(newValue) {
$scope.selectedCarPart = newValue['brakes'];
}, true);
有关$ watch的更多信息,请访问:https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope