我正在尝试根据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后将其同步?
我觉得答案就像在范围上有一个承诺,所以我在对象实现时同步它,但还不太确定。感谢。
答案 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