angular-ui-router url被误认为是参数

时间:2016-11-03 15:02:59

标签: javascript angularjs angular-ui-router

我正在使用AngularJS(1.4)构建一个应用程序,我遇到了angular-ui-router的问题。

我有这条路线:

{
    name: 'personal_payment',
        url: '/:personalLink',
        templateUrl: 'personal_payment/personal_payment.html',
        data: {
            needAuth: false,
            noBackground: true
        }
}

然后在路由定义的末尾我有这行代码:

states.forEach(function(state) {
    $stateProvider.state(state);
});

问题是,现在每个页面如/ login,/ dashboard都被误认为:personalLink参数。使用ngRoute,首先定义/ login路由然后定义/:personalLink就足够了,但是使用angular-ui-router它似乎不起作用,因为/:personalLink路由是数组的最后一个路由。

我错过了什么?

编辑:我注意到只有/ login路由不起作用,其他每个路由的解析顺序都是正确的。我想这条路线有问题!

这是/ login路由定义:

    {
        name: 'login',
        url: '/login',
        templateUrl: 'login/login.html',
        data: {
            needAuth: false,
            noBackground: false
        }
    },

即使控制器为空,路径也不起作用:

'use strict';

angular.module(
    'myApp.login', ['ui.router']
).
controller('LoginCtrl', ["$rootScope", function($rootScope) {
}]);

模板如下:

<div class='landing1'>
    <div class='landingbox' style='min-height: 386px'>
        <div ng-controller="LoginCtrl" class='below-header'>
            LOGIN PAGE
        </div>
    </div>
    <div class="stripebadge">
        <a href='https://herokuapp.com/privacy' target="_blank" class='light-text font-montserrat' style='font-size: 12px; margin-left: 7px'>Privacy Policy</a>
        <a  href="mailto:info@paylinko.com?Subject=Paylinko%20Support%20" class='light-text font-montserrat' style='font-size: 12px; margin-left: 22px;'>Contact</a><br>
        <img src="assets/images/stripebadge.svg" width="185" align="center" style='margin-top: 10px; margin-bottom: 6px;'><br>
        <span class='light_text' style='font-size: 12px;'>
       <br>
        Copyright &copy; 2016 Paylinko, all rights reserved.</span>
    </div>
    <div ng-include="'footer_pl.html'"></div>
</div>

其他路线工作正常,我真的不知道这个路线有什么问题。

2 个答案:

答案 0 :(得分:0)

第一个参数是名称,所以:

states.forEach(function(state) {
    $stateProvider.state(state.name, state);
});

答案 1 :(得分:0)

问题与路线系统没有任何关系。基本上问题是当路由链接(例如:'/ login')与应用程序架构内的物理文件夹匹配时。与包含文件的文件夹相比,所有正在运行的路径都有不同的名称(例如:路径名称为'/ account',但文件夹名称为'setting')。

我在服务器文件中添加了此代码:

app.use('/*', function(req, res, next) {
    if (req.baseUrl && (req.baseUrl.match(/\.*\.(js|html|css|jpg|jpeg|png|gif|svg|ttf|woff|woff2|ico|php|xml|txt)\.*/g) )) {
            return next();
        } else {
            res.sendfile('app/index.html');
        }

});

现在一切正常。