AngularJS:在应用程序启动后设置$ routeProvider?

时间:2015-01-23 23:10:06

标签: angularjs angular-ui angular-ui-router angular-translate

我正在构建一个多语言应用程序,我想知道是否可以动态设置角度路径路径,即。这样我就可以将slug从英语翻到西班牙语(/#/login变为/#/iniciar)。

我正在使用angular-translate和require.js延迟加载,因此我的翻译字符串在应用程序启动后加载。因此,我需要能够在应用程序启动后更改路由。

是否可以使用angular-route,或者甚至使用angular-ui的ui-router代替......?

类似的东西:

app.config(function ($routeProvider, SomeLanguageService) {
  var pathSlugs = SomeLanguageService.getRouteSlugs('ES');

  $routeProvider
    .when('/' + pathSlugs.home , {
      templateUrl: '/home/home.html',
      controller: ''
    });
});

1 个答案:

答案 0 :(得分:2)

此处显示UI-Router包含工作人员的方式:AngularJS - UI-router - How to configure dynamic views

诀窍是,在配置阶段保留对提供商配置的引用,稍后在运行阶段

中使用它
var $stateProviderRef;
app.config(['$stateProviderRef',
  function ($stateProviderRef) 
  {
    $stateProviderRef = $stateProvider; // this configuration API
  }])

现在即使在运行中,我们仍然可以访问该提供程序配置API,以定义状态

app.run([ SomeLanguageService
  function (SomeLanguageService) 
  {
      var pathSlugs = SomeLanguageService.getRouteSlugs('ES');
      // define state as needed
      var state = {
        "url": '/' + pathSlugs.home + ...,
        "parent" : ...,
        "abstract": ...
        "views": {}
      };
      // inject that in to the configuration
      $stateProviderRef.state(value.name, state);
     ...