UI-Router url部分在刷新时被视为参数

时间:2015-05-24 17:18:20

标签: angularjs angular-ui-router

使用angularJS和UI - Router,我设置了一些路线。

然而,其中一条路线(/events/create),"创建" URL的一部分被创建为我的另一个路由的参数,而不是解析为正确的声明地址。

知道如何解决这个问题吗?

events.js

angular.module('events', [
    'events.show',
    'events.create',
])
;

事件-create.js

angular.module('events.create', [

])
.config(function($stateProvider) {
    $stateProvider
        .state('sb.events.create', {
            url: '/events/create',
            views: {
                'forms@': {
                    templateUrl: 'app/events/create/event-create.tmpl.html',
                    controller: 'EventsCreateCtrl as createCtrl',
                },
                'main@': {

                }
            },
        })
})

最后,events-show.js

angular.module('events.show', [

])
.config(function($stateProvider) {
    $stateProvider
        .state('sb.events.show', {
            url: 'events/{eventId}',
            views: {
                'forms@': {
                    templateUrl: 'app/events/show/event-show.tmpl.html',
                    controller: 'EventsShowCtrl as showCtrl',
                },
                'main@': {

                }
            },
        })
})
.controller('EventsShowCtrl', 
    function EventsShowCtrl($state, $stateParams, EventsModel, UserModel, $rootScope) {

})

;

如您所见,events.show声明了要使用的参数。这是在刷新或直接访问网址时用于网址events/create的状态。

如果我以正常方式导航到此状态,则使用正确的状态和模板。

1 个答案:

答案 0 :(得分:0)

a working plunker。如何解决它的方法是改变声明的顺序

确保此状态

.state('sb.events.create', {
    url: '/events/create',

在此

之前注册(执行$stateProvider.state()
.state('sb.events.show', {
    //url: 'events/{eventId}',
    url: '/events/{eventId}',

注意:请确保网址:'/ events / {eventId}'以'/'开头

原因是,该命令决定万一,我们可以两种方式对待一个网址。而 url: '/events/create' ,可以真正用作第二个。 (“创建”作为参数eventId

检查here