AngularJS: Как проверить, выбрать URL внутри state.go на основе условия? - PullRequest
0 голосов
/ 25 августа 2018

Прежде чем задать свой вопрос, я знаю, что было много тем по этой теме, но ни одна из них на самом деле не имеет никакого отношения к моей проблеме.

в моем приложении angularJS я использую $ stateProvider для переключения состояний. Однако мои приложения требуют, чтобы я передавал параметры строки запроса, и я хотел сохранить их.

Вот как я это сделал

$rootScope.$state.go('defaultState', {id: 12});

и затем я делаю следующее

$stateProvider.state('defaultState', {
url: /test/?id,
params: { id: {value: ""} },
templateUrl: 'testTemplate.html'
});

Так что теперь, когда я переключаюсь в свое состояние, я вижу URL следующим образом

/test/?id=12

что я и хотел, отлично!

Однако, при условии, что существуют условия, когда я бы назвал $rootScope.$state.go('defaultState') без передачи параметра. В этом случае я получу URL следующим образом

/test/?id=

Что странно! Я хотел добавить строку запроса параметра, только если мы обнаружим параметр!

Так что я пытаюсь сделать что-то вроде этого

$stateProvider.state('defaultState', {
url: id ? '/test/id?' : '/test/',
params: { id: {value: ""} }, ..

так что если пусто, мы выбираем второй URL, а не первый, но это не работает, и я получаю, что идентификатор не определен ..

Есть ли способ сделать то, что я пытаюсь сделать, не имея второго состояния и второго $ state.go () в зависимости от условия?

Могу ли я передать переменную внутри $ state.go ('', {}, ..) и проверить ее вместо проверки параметра для условия?

Спасибо

1 Ответ

0 голосов
/ 25 августа 2018
  1. Что касается документов для параметров запроса более здесь , то определение вашего состояния:

    $stateProvider.state('defaultState', {
    url: /test/?id,
    params: { id: {value: ""} },
    templateUrl: 'testTemplate.html'
    });
    

    пытается включитьдва разных метода использования параметров запроса в одном месте.

  2. Однако это не является реальной проблемой, и достаточно просто удалить параметры, например:

    $stateProvider.state('defaultState', {
    url: /test/?id,
    templateUrl: 'testTemplate.html'
    });
    
  3. На самом деле происходит то, что эта строка здесь params: { id: {value: ""} инициализирует id строкой нулевой длины, которая также является допустимым параметром запроса, и поэтому вы видите /test/?id=, которыйна самом деле то, что должно происходить в соответствии с установленными вами правилами.

  4. Кроме того, params: { id: ""} может быть достаточно для достижения того же, что и params: { id: {value: ""}.Так что, если вы используете params где-то еще, вы можете немного изменить его, чтобы быть немного более чистым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...