我想我在应用程序中加载了一些基本概念,但是我希望状态会被设置,因为在$location.url()中定义了url,
我的代码片段,用于处理初始加载时的状态:
$http.get("Navigation").then(function(response){ var navigationObjects = response.data,directUrl = $location.url(),stateName = null; scope.availableStates = ims360RouterStateService.getAvailableStates(navigationObjects); if (!directUrl) { scope.updatePrimaryState(scope.availableStates[0]); } else { //TODO there's probably a better way to do this //parsing out the state name,requires that the state name matches the url,this fails when I have a place holder (such as an id to a resource) stateName = directUrl.substring(1).replace(/\//g,"."); $state.go(stateName); } });
在这段代码中,我从服务器获取导航对象,确定用户有哪些ui-router状态.所有我定义的状态然后被过滤到可用状态,这是我用于我的导航ui.
另外,“updatePrimaryState(…)包括调用$state.go(…)
那么为什么状态不是初始加载的呢?而如果这个IS预期的行为,那么什么是一个很好的方式来指导用户指定的url?
UPDATE
我创建了一个显示预期行为的空格(http://plnkr.co/edit/m9gQLOZmqaAY88wSc6wC?p=preview).我试图复制我的问题,但在简单的情况下,它只是按预期工作.所以显然,我的目的是有一些不正确的东西,但是我的设置与plunker非常相似.要测试我在我的应用程序中看到的场景,您需要:
>在单独的窗口中启动plunker视图
>验证状态设置后,将链接复制并粘贴到新窗口中.
>在这个新窗口中,应用程序应该直接转到与url匹配的状态.在这个职位上,这个工作,但在我的应用程序,它不是.
在我的应用程序加载后,加载的状态是空的状态,名称为“”,其中的URL为“^”.
更新2
在挖掘代码寻找差异后,我发现当角度“$locationChangeSuccess”被广播时,ui-router中的侦听器尚未初始化.我发现不同的是,我们有一个单独的(可重用的)登录应用程序,最初被引导,然后成功登录后,引导实际的应用程序.当实际的应用程序被引导时,$locationChangeSuccess已经被广播,并且ui-router监听器没有被初始化来捕捉它.
我的想法一直是在我的应用程序启动后重新播放该事件,但是我仍然有时间问题,事件侦听器似乎是最初的初始化.我首先将它添加到myApp.run()块,但广播仍在事先发生.将广播投放到应用程序的主要指令的链接功能(ui视图)的工作原理,但不能确定这是一个很好的方法.有没有更好的办法?
使用app.js中的下一个代码可以实现初始状态:
app.run(['$state',function ($state) {}])