当routeParameter更改时,AngularFire在工厂中更改引用

时间:2016-01-15 14:10:03

标签: javascript angularjs firebase angularfire

我目前正在开发一个带有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;
});

非常感谢您的帮助,感谢这个社区我过去几年的编码,最后是积极参与的时间:)。

1 个答案:

答案 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.