Как изменить URL-адрес состояния в AngularJS UI-маршрутах - PullRequest
0 голосов
/ 22 февраля 2019

Я на угловой 1.6.Попытка переопределить значение состояния UI-маршрутизатора.

Исходные состояния следующие:

$stateProvider.state('parent', {
    abstract: true,
    parent: 'ancestor',
    url: '/parent',
    data: {
        authorities: [A,B]
    },
    views: {
        'content@': {
            templateUrl: 'app/scripts/myapp/module/parent.html'
        }
    }
})
.state('child', {
    parent: 'parent',
    abstract: true,
    views: {
        'tabs': {
            templateUrl: 'app/scripts/myapp/module/submodule/child.html',
            controller: 'ChildController',
            controllerAs: 'childController'
        }
    }
})
.state('grandChild', {
    parent: 'child',
    url: '/{dataSource:(?:option1|option2|option3)}',
    views: {
        'body': {
            templateUrl: 'app/scripts/myapp/module/submodule/grandchild.html',
            controller: 'GrandChildController',
            controllerAs: 'grandChildController'
        },
    },
    resolve: {
        groups: ['MyService', '$transition$', function (MyService, $transition$) {
            var selectedSource = $transition$.params().dataSource ? $transition$.params().dataSource : 'option1';
            return MyService.getGroups(selectedSource);
        }]
    }
})

Затем в одной из реализаций я пытаюсь переопределить значение url - добавив option4 для одного из состояний.

var states = $stateRegistry.deregister('grandChild');
$stateRegistry.register(states[0]);//There is one more child. For simplicity not showing here. 
states[1].url.pattern = '/{dataSource:(?:option1|option2|option3|option4)}';
$stateRegistry.register(states[1]);

когда я следую за 'grandChild'

$state.go('grandChild', {dataSource: 'option4'});

Я получаю сообщение об ошибке

Param values not valid for state 'grandChild'. Invalid params: [ dataSource ]

при проверке $ state

Я вижу что-то странное.

$state.$current.params.datasource.type.pattern = /(?:option1|option2|option3)/
$state.$current.url.pattern = "/{dataSource:(?:option1|option2|option3|option4)}"
$state.$current.url._compiled[0] = /((?:option1|option2|option3))/
...