我正在尝试实现一种语言切换器,如果用户在“ 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