Nor*_*mac 13 angularjs angular-ui-router
当我去我的应用程序时https://localhost/my-app/resources/index.html,我有逻辑进入我自定义的默认状态.但是,当我想直接转到我的应用程序的特定部分(即https://localhost/my-app/resources/index.html#/orders/draft)时,状态未设置(模板也未加载到ui-view指令中).一旦初始加载完成(设置了默认状态),那么我可以直接在网址内容中添加内容.
我想我错过了一些关于如何在我的应用程序中加载内容的基本概念,但我希望状态会被设置,因为url是在 $location.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);
}
});
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我从服务器获取导航对象,确定用户可以访问哪些ui-router状态.然后我所有定义的状态都被过滤到可用状态,这些是我用于导航ui的状态.
另外,"updatePrimaryState(...)包含对$ state.go(...)的调用
那么,为什么状态没有设置初始负载?如果这是预期的行为,那么将用户引导到指定的url的好方法是什么?
UPDATE
我创建了一个显示预期行为的plunker(http://plnkr.co/edit/m9gQLOZmqaAY88wSc6wC?p=preview).我试图复制我的问题,但在简单的情况下,它只是按预期工作.显然,我的结果有些不对劲,但我的设置与plunker中的设置非常相似.要测试我在我的应用程序中看到的场景,您需要:
加载我的应用程序后,加载的状态是名为""的空状态,其中包含URL"^".
更新2 在深入研究寻找差异的代码之后,我发现当广播角度为"$ locationChangeSuccess"时,ui-router中的监听器尚未初始化.我发现不同之处在于我们有一个单独的(可重复使用的)登录应用程序,最初是引导的,然后在成功登录后,引导实际的应用程序.在实际应用程序被引导时,$ locationChangeSuccess已经被广播,并且ui-router侦听器尚未初始化以捕获它.
我的想法是在我的应用程序被引导后重新播放该事件,但我仍然遇到时间问题,事件监听器似乎是最后一件事初始化.我首先将它添加到myApp.run()块,但广播仍在事先发生.将广播放入应用程序的主要指令的链接功能(ui-view所在的位置)可以正常工作,但不确定这是一个好方法.有没有更好的办法?
我想我最好继续发布我的第二次更新作为解决方案,这适用于我的情况:
在深入研究代码寻找差异后,我发现当广播角度“$locationChangeSuccess”时,ui-router中的监听器尚未初始化。我发现区别在于我们有一个单独的(可重用的)登录应用程序,最初是引导的,然后在成功登录后引导实际的应用程序。在实际应用程序启动时, $locationChangeSuccess 已经被广播,并且 ui-router 侦听器尚未初始化以捕获它。
将广播放入应用程序的主指令的链接函数(ui-view 所在的位置)中是可行的,但不确定这是一个好方法。
希望有帮助。
| 归档时间: |
|
| 查看次数: |
4861 次 |
| 最近记录: |