#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