使AngularJS控制器中的$ location无效

时间:2016-03-21 14:50:08

标签: javascript angularjs controller angular-ui-router

我正在编写一个Angular单页面应用程序,其中有许多"页面"通过公共视图和公共控制器(使用ui-router)呈现。要使用的数据存储在服务中的分层对象中,并使用URL组件进行检索。也就是说,如果我有网址#/getstarted/get,则会从myService.getContents().getstarted.get读取内容。

这很好用,但有一个例外:当我想导航到另一个页面时,没有任何反应。为了进入另一个页面,我必须访问由另一个控制器控制的页面。

显然,当我点击具有相同控制器的状态的链接时,控制器不会被再次解析(可以从" console.log调试中看到),因此从中检索数据的参数是没精神。

是否有办法(在回调中,在module.config中或在某些ui-sref中)使控制器数据无效?

2 个答案:

答案 0 :(得分:0)

如果你有一个plunkr,会更容易测试,但尝试一个变体:

$stateProvider.state('somewhere', {
  url:'/somewhere',
  cache:false,
  templateUrl:function(params) {
      return 'some/calculated/path/view.html'
  },
  controllerProvider:[function() {
    return 'HomeController';
  }]
});
每次都应该调用{p> templateUrlcontrollerProvider ......

答案 1 :(得分:0)

进一步的研究表明,实际上必须更新ui-sref部分。具体地说:添加ui-sref-opts="{reload: true}"会导致重新解释控制器数据。因此,我必须将此指令添加到模板中的所有ui-sref链接,以激活我需要的行为。

这在http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.directive:ui-sref中有记载,但必须提到的是,没有关于如何格式化对象本身的示例。