我的$ scope变量没有更新

时间:2015-03-21 03:06:51

标签: angularjs

我有从服务中获得的对象集合:

$scope.rooms = TestData.list().rooms;

// {"room1":{"name":"Bathroom"},"room2":{"name":"WCC"},"room3":{"name":"Kitchen"}};

我需要$routeParams.id

找到空间
$scope.room = $scope.rooms[$routeParams.id];

// For example $routeParams.id = 'room1'

如果我在视图中检查它:

{{rooms}}

{{room}}

我看到房间如何动态更新,但房间总是undefined。但是,如果我打电话给这样的话:

{{room = rooms[roomUid]}}

// $scope.roomUid = $routeParams.id

它找到了预期的空间。为什么我在控制器中找不到空间?

更新:

我发现了我的问题,当我尝试按ID查找房间时,我的$scope.rooms集合是空的。 $timeout $scope.room的工作情况与预期的一样,但是在填充$scope.rooms之后如何开始寻找空间?

$timeout(function(){$scope.room = $scope.rooms[$routeParams.id];}, 3000);

我通过以下方式解决了这个问题:

if($routeParams.id){
  $scope.action = 'Edit';
  $scope.roomID = $routeParams.id;
  $scope.$watch('rooms.' + $scope.roomID, function(){
    $scope.room = $scope.rooms[$routeParams.id];        
  });
};

很好吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,不需要

$scope.$watch。只有在动态添加房间并且您想要执行某些操作时,才会添加$watch

只需检查$routeParams.id以及undefined是否room开始搜索rooms

如果您从服务中获取then数据。然后将逻辑用于获取{{1}}解析函数中的特定空间。通过这种方式,您可以确保在搜索特定房间之前可以使用房间列表。