Неверное значение, возвращаемое при попытке получить параметры URL в AngularJS

#angular

#angular

Вопрос:

Я пытаюсь получить параметры URL по ссылке, которая выглядит следующим образом: localhost:8000testSession1amp;otp="91PVSR" Где формат URL такой: localhost:8000testSessionidamp;otp="otpvalue"

Я использую stateProvider в своем контроллере следующим образом:

 class UserTestSessionController {
    constructor($http, $state, UserTestSessionService, $stateParams) {
        this.$http = $http;
        this.$state = $state;
        this.$stateParams = $stateParams;
        this.userTestSessionService = UserTestSessionService;
    }

    startSession() {
        let self = this;
        let sessionId = this.$stateParams.id;
        let otp = this.$stateParams.otp;

        this.userTestSessionService.startSession(sessionId, otp).then(function(data) {
            if(data.isError) {
                self.$state.go("sessionExpired");
            }
            else {
                self.$state.go("testingSession");
            }
        });
    }
}

export default UserTestSessionController;
  

И вот как URL определяется с помощью state:

 export default angular.module("examino.userTestSession", ["ui.router"])
    .config(function($stateProvider) {
        $stateProvider
            .state("testingSession", {
                url: "/testSession/:id?otp",
                controller: "UserTestSessionController",
                templateUrl: "./app/components/userTestSession/user-test-session.html",
                controllerAs: "vm"
            })
})
  

Проблема возникает, когда я пытаюсь получить значения ID и OTP:

Id=1amp;otp="someValue" и otp является undefined .

введите описание изображения здесь

Как правильно считывать эти значения в контроллере?

Комментарии:

1. Можете ли вы попробовать без ?otp части в спецификации URL состояния?

2. @SylvainB Я только что сделал, значения те же? значение otp не определено…

3. @nemo_87 Пытались ли вы быть более точным в указании вашего шаблона URL? вот так: url: «/testSession/{id: [0-9] }?otp»

4. @Nedev Да, я сделал… Например, если я добавлю что-то вроде того, что вы предложили, он вообще не распознает этот URL… Я имею в виду, что не получается, что это состояние принадлежит этому URL.

5. @nemo_87 возможно, ваша проблема вызвана выбором параметров в кавычках, в вашем примере я вижу localhost:8000 testSession 1 amp;otp= «91PVSR», но правильный способ — localhost:8000 testSession 1amp;otp = 91PVSR

Ответ №1:

Я думаю, у вас ошибка в объявлении маршрута. Попробуйте это (измените URL) :

 $stateProvider
        .state("testingSession", {
            url: "/testSession?:id:otp",
            controller: "UserTestSessionController",
            templateUrl: "./app/components/userTestSession/user-test-session.html",
            controllerAs: "vm"
        })
  

И доступ с помощью $stateParams.id и $stateParams.otp