如何在没有首先导航到index.html的情况下直接进入使用ui-router的状态

时间:2015-01-15 06:44:43

标签: angularjs angular-ui-router

我有一个使用ui-router的AngularJS应用程序。一切正常,但我希望用户注册确认屏幕可以这样访问:

  http://localhost:2757/Auth/confirmation

在我目前的配置中,当我使用此链接打开浏览器页面时,它不会查找index.html,也不会进入/ Auth / confirm状态。我理解为什么会这样,但我不知道如何解决这个问题。

有人可以给我一些建议,告诉我如何/如果我能建立一个让我直接进入/ Auth /确认的链接。

我能想到的可能就是这样:

  http://localhost:2757/index.html?load=AuthConfirm

然后以某种方式检查一下在index.html加载后检测到要转换到的新状态。

这是我的AppConfig文件:

var auth = {
    name: 'auth',
    url: '/Auth',
    views: {
        'root': {
            templateUrl: 'app/auth/partials/home.html'
        }

    }
};

var authContent = {
    name: 'auth.content',
    url: '/:content',
    views: {
        'root': {
            templateUrl: 'app/exams/partials/home.html'
        },
        'content': {
            templateUrl: function (stateParams) {
                return 'app/auth/partials/' + stateParams.content + '.html'
            }
        }
    }
}

这是我尝试过的东西:

http://localhost:2757/index.html<<带我到我的主索引页面

http://localhost:2757/index.html/Auth<<返回页面未找到

http://localhost:2757/index.html/Auth/register<<返回页面未找到

2 个答案:

答案 0 :(得分:4)

我想说的是,我们需要的是 - 让index.html成为一个SPA(单页应用程序)。然后我们将从UI-Router中内置的功能中获益:

.when() for redirection

  

参数:

     

什么字符串| RegExp | UrlMatcher要重定向的传入路径       处理程序字符串|功能您要将用户重定向到的路径。

     

handler为字符串

     

如果handler是一个字符串,则将其视为重定向,并根据match的语法进行插值(例如,像RegExp的String.replace(),或者像UrlMatcher模式一样)。

app.config(function($urlRouterProvider){
    // when there is an empty route, redirect to /index   
    $urlRouterProvider.when('', '/index');

    // You can also use regex for the match parameter
    $urlRouterProvider.when(/aspx/i, '/index');
})

.otherwise() for invalid routes

  

参数:

     

路径字符串|功能要重定向到的url路径或返回url路径的功能规则。函数版本传递两个参数:$ injector和$ location。

app.config(function($urlRouterProvider){
    // if the path doesn't match any of the urls you configured
    // otherwise will take care of routing the user to the specified url
    $urlRouterProvider.otherwise('/index');

    // Example of using function rule as param
    $urlRouterProvider.otherwise(function($injector, $location){
        ... some advanced code...
    });
})

如何正确使用.when() (例如声明的订单请在此处查看(更多详细信息和示例)

答案 1 :(得分:1)

实际上非常简单,但需要在服务器端工作:必须将服务器配置为提供路径/Auth/confirmation的index.html页面(以及应用程序的所有其他可收藏的URL)。< / p>

一旦确实如此,转到/Auth/confirmation的用户将下载index.html文件,该文件将启动角度应用程序。 ui-router模块将分析位置,加载相应的状态,并显示相应的视图。