我有从服务中获得的对象集合:
$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];
});
};
很好吗?
答案 0 :(得分:0)
$scope.$watch
。只有在动态添加房间并且您想要执行某些操作时,才会添加$watch
。
只需检查$routeParams.id
以及undefined
是否room
开始搜索rooms
。
如果您从服务中获取then
数据。然后将逻辑用于获取{{1}}解析函数中的特定空间。通过这种方式,您可以确保在搜索特定房间之前可以使用房间列表。