AngularJS从作用域分配作用域变量

AngularJS从作用域分配作用域变量,angularjs,Angularjs,在angularJS中,当试图从另一个范围变量的值分配一个范围变量时,派生变量的值为空。在本例中,我希望有一个汽车的范围参考,也希望有一个特定汽车零件的范围参考(以后可能会在应用程序中更改) 例如: $scope.car = Car.get(); //async http service that returns a JSON car object $scope.selectedCarPart = $scope.car.brakes; HTML: 为什么selectedCarPart为空 我

在angularJS中,当试图从另一个范围变量的值分配一个范围变量时,派生变量的值为空。在本例中,我希望有一个汽车的范围参考,也希望有一个特定汽车零件的范围参考(以后可能会在应用程序中更改)

例如:

$scope.car = Car.get(); //async http service that returns a JSON car object
$scope.selectedCarPart =  $scope.car.brakes;
HTML:


为什么selectedCarPart为空

我假设您的
get
调用是异步的,因此当您分配
selectedCarPart
时,您的
$scope.car
当前为空,并且还没有一些
制动器

您必须等待
get
调用结束,并在
http
服务的成功回调中分配生成的JSON car对象的值。

即使这样做可行,我认为还有更好的方法

<div>{{car.engine}} - {{car[selectedPartKey]}}</div>
{{car.engine}}-{{car[selectedPartKey]}

这样,您只需将
selectedPartKey
的值更改为
'brakes'
。按照您的方式,如果
汽车的值发生变化,它将不会被反映…

Apercu接受的答案是正确的。您还可以使用更通用的解决方案,即使用$watch。在这种情况下,您可以这样写:

$scope.$watch('car',function(newValue) {
  $scope.selectedCarPart = newValue['brakes'];
}, true);

关于$watch的更多信息可以在这里找到:$rootScope.Scope

这里不也应该有错误吗?比如“undefined没有名为brakes的属性”之类的?是的,他可能还没有检查他的控制台。@Aperçu谢谢,你让我走上了正确的轨道。get方法接受在请求完成时执行的回调。
<div>{{car.engine}} - {{car[selectedPartKey]}}</div>
$scope.$watch('car',function(newValue) {
  $scope.selectedCarPart = newValue['brakes'];
}, true);