我目前正在开发一个带有firebase的角度应用程序(使用angularFire),其中许多工厂都提供了firebase数组和对象。
每当路由参数“element_id”发生变化时,我需要在会话中多次更改所有factorys的引用,但是一旦第一次调用它们,angularjs就会加载所有工厂,之后我没有看到更新引用的方法初次通话。
我尝试使用
重新加载应用$route.reload();
没有改变任何内容和
$window.location.reload();
要么导致错误404,因为这个页面在html5模式下不可用localhost:8000 / element1不存在,或者在我没有使用html5模式时将我带回localhost:8000而没有我的element_id。
这是我的根火力工厂的一家工厂:
app.factory("fireroot", function(){
var reference = new Firebase("https://mybase.firebaseio.com");
return reference;
});
app.factory('core_data', function($firebaseObject, fireroot, $routeParams) {
var reference = fireroot.child("elements").child($routeParams.element_id).child("core-data");
var core_data = $firebaseObject(reference);
return core_data;
});
非常感谢您的帮助,感谢这个社区我过去几年的编码,最后是积极参与的时间:)。
答案 0 :(得分:2)
开始参与的好时机!
不要在工厂注入$routeParams
。在控制器内部使用它,或者更好的是,使用路由器。
尝试从可以根据ID构建core_data
的{{1}}工厂返回一个函数。
然后在路径中的resolve对象中,您可以访问$firebaseObject
并构建$routeParams
。然后您可以返回$firebaseObject
承诺,因此Angular将在解析承诺时加载视图。
现在你的控制器非常薄,因为配置为你做了很难。
$loaded()
And incase you are wondering, the format comes from the Angular Styleguide.