当路径不可用时绑定变量

时间:2014-12-22 17:15:02

标签: angularjs firebase angularfire

我正在尝试根据firebase的良好做法展平我的数据,所以我尝试创建如下函数:

function get(model, id) {
    var path = new Firebase('my/root/url');
    return $firebase(path.child(model+'/'+id)).$asObject();
};

同时在我的控制器中我希望有类似的东西:

$scope.user = get('user', $scope.userId);

在父控制器的某处设置$ scope.userId。关键是,当脚本启动时,$ scope.userId在设置之前保持未定义一段时间。当id未定义时,如何将$ scope.user设置为空对象,然后在设置id后将其同步?

我觉得答案就像在范围上有一个承诺,所以我在对象实现时同步它,但还不太确定。感谢。

1 个答案:

答案 0 :(得分:3)

您可以观看userId var并在有值时触发该函数。

$scope.$watch('userId', function() {
   // Each time userId change this callback will be executed
   if ($scope.userId)
      $scope.user = get('user', $scope.userId) 
})

第二种解决方案如果您知道userId的设置位置,则可以使用自定义事件:

//Execution point where the userId is initalized
$scope.userId = someValue;
$scope.$emit("userid_change",$scope.userId); // Use $broascast instead of $emit if the current scope is father of the other one


// catch the event
$scope.$on("userid_change", function(e, userId) { 
   $scope.user = get('user', userId);
})

参考文献:

https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch

https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$emit

https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$broadcast

https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$on