当前位置: 首页 > 面试题库 >

使用ui路由器公开当前状态名称

岳玉书
2023-03-14
问题内容

我正在尝试实现一种语言切换器,如果用户在“ en”侧的任何给定页面上单击“ de”,它将带他们进入“ de”侧的该页面。如果我使用console.dir $
state参数,它将使用给定$ state的“当前”属性公开我想要的值。如果我尝试用$ state.current来console.dir $
state.current来关注我想要的值,那么它只会给出父状态属性(我的当前视图是嵌套的)。

我当前的想法是,我在url / en /
content上,然后可以动态地让我的lang导航将相应的目标点动态加载到某种数据属性中,并使用自定义指令进行选择,以在其中启动一个“转到”并为每个角度转换设置我的preferredLanguage值。

目前的关键问题是公开$ state名称-同样,当仅浏览$ state时,当前对象将提供我想要的值,但是$ current.state直接仅提供父状态。

如果有人对如何执行此操作有更好的建议(以有角度的方式-没有自定义cookie垃圾),我很乐意接受建议。

谢谢!

更新!代码示例:

我的状态的对象引用:

var urlStates = {
        en: {
            home: {
                name: 'home',
                url: '/en',
                templateUrl: 'templates/'+lang+'/home.html',
                abstract: 'true'
            },
            home_highlights: {
                name:'home.highlights',
                url: '',
                templateUrl: 'templates/'+lang+'/home.highlights.html'
            },
            home_social:
            {
                name: 'home.social',
                url: '/social',
                templateUrl: 'templates/'+lang+'/home.social.html'
            },
            home_map:
            {
                name: 'home.map',
                url: '/map',
                templateUrl: 'templates/'+lang+'/home.map.html'
            }

        };

我的状态:

$stateProvider
        .state(urlStates.en.home)
        .state(urlStates.en.home_highlights)
        .state(urlStates.en.home_social)
        .state(urlStates.en.home_map);

        $locationProvider.html5Mode(true);

})

控制器:

.controller('LandingPage', function($translate, $state){
    this.state = $state;
    this.greeting = "Hello";
});

最后,我在dom中看到的输出是:

使用this.state = $ state;

{
    "params": {},
    "current": {
        "name": "home.highlights",
        "url": "",
        "templateUrl": "templates/en/home.highlights.html" },
        "transition": null
}

使用this.state = $ state.current

{
    "name": "",
    "url": "^",
    "views": null,
    "abstract": true
}

问题答案:

这就是我的方法

JAVASCRIPT:

var module = angular.module('yourModuleName', ['ui.router']);

module.run( ['$rootScope', '$state', '$stateParams',
                      function ($rootScope,   $state,   $stateParams) {
    $rootScope.$state = $state;
    $rootScope.$stateParams = $stateParams; 
}
]);

HTML:

<pre id="uiRouterInfo">
      $state = {{$state.current.name}}
      $stateParams = {{$stateParams}}
      $state full url = {{ $state.$current.url.source }}    
</pre>

http://plnkr.co/edit/LGMZnj?p=preview



 类似资料:
  • 问题内容: 有没有办法获取当前状态的先前状态? 例如,我想知道当前状态B之前的先前状态是什么(以前的状态本来是状态A)。 我无法在ui-router github文档页面中找到它。 问题答案: ui-router转换后不会跟踪以前的状态,但是会在状态更改时广播该事件。 您应该能够从该事件中捕获先前状态(即将离开的状态):

  • 问题内容: 我试图在我的应用程序中编写通用路由,并根据路由参数动态解析视图和控制器名称。 我有以下有效的代码: 但是,我无法找到一种动态解析控制器名称的方法。我尝试使用此处所述的方法,但是ui- router似乎处理处理的方式与angular- route不同。 有指针吗? 编辑 :我已经尝试使用,但是对我不起作用(例如,以下代码仅返回一个硬编码的控制器名称,以测试其是否真正起作用): 给我以下错

  • 问题内容: 我将UI路由器用于主菜单的选项卡以及一种状态(用户)内的链接。用户状态有一个用户列表,当单击一个用户时,我只想重新加载子状态,但是它正在重新加载子状态和父状态(用户)。 这是我的代码: 这是单击用户时在我的父控制器(UserController)中调用的函数: 假设我处于users.userGroups状态,当我单击另一个用户时,只希望重新加载users.userGroups状态。这可

  • 问题内容: 是否可以使用需要解析数据的ui-router来建立抽象状态?我需要使用个人资料信息加载页面的上半部分,然后在页面底部添加一个用于加载其他详细信息的子导航。这个想法是,抽象状态每次都会加载配置文件信息,而不管我处于哪个子状态。它似乎不起作用。 例: 问题答案: 和它的 plnkr 因此,在我们的情况下,我们需要在父级中进行此更改 和这个孩子 因此,与其在父母和孩子中使用resolve:{

  • 问题内容: 我希望能够使用ui-router转换为状态并传递任意对象。 我知道通常会使用它,但是我相信此值会插入URL中,并且我不希望用户能够对此数据添加书签。 我想做这样的事情。 有没有办法在不将值编码到URL的情况下执行此操作? 问题答案: 在0.2.13版中,您应该可以将对象传递到$ state.go, 然后访问控制器中的参数。 myParam将不会显示在URL中。 资源: 请参阅chris

  • 问题内容: 有人知道如何在不更改url的情况下更改ui路由器状态吗?如下代码所示;在某些情况下,需要将用户重定向到403或401状态。我希望能够执行此重定向而无需更改url。 问候,klmdb 问题答案: 将选项传递给$ state.go 实际使用它:http : //plnkr.co/edit/w2aolrt9wdW3EFcEB3Lw?p=preview