Как установить параметры запроса по умолчанию для маршрута в Angular 7?

Вы можете использовать

$search_field_pattern  = "/\bdata\[SearchForm]\[(\w+)]/i";
if(preg_match($search_field_pattern, "data[SearchForm][somestringhere]", $m)) {
    echo $m[1]; // => somestringhere
}

См. PHP demo

Шаблон соответствует

  • \b - граница слова
  • data\[SearchForm]\[ - буквальная строка data[SearchForm][ (примечание [ экранировано, чтобы соответствовать символам [)
  • (\w+) - группа захвата 1 : один или несколько символов слова
  • ] - символ ].

Третий аргумент preg_match, $m будет содержать результаты , Поскольку необходимая подстрока захватывается в группу 1, значение извлекается с помощью $m[1].

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

if(preg_match("~\[(\w+)](?!.*\[\w+])~s", "data[SearchForm][somestringhere]", $m)) {
    echo $m[1]; // => somestringhere
}

См. this PHP demo .

Чтобы получить второй, используйте

if(preg_match("~\[\w+].*?\[(\w+)]~s", "data[SearchForm][somestringhere]", $m)) {
    echo $m[1]; // => somestringhere
}

См. еще одну демонстрацию PHP .

0
задан frot.io 19 January 2019 в 14:34
поделиться

1 ответ

В частности, по вашему вопросу:

можно ли перенаправить маршрут без параметров запроса на маршрут с параметрами запроса?

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

Альтернатива 1 - поскольку вы используете ngrx, один из способов сделать это - использовать пользовательский сериализатор. Документы с сайта ngrx.io показывают пример возврата параметров с сериализацией. Здесь вы можете добавить логику, чтобы добавить параметры по умолчанию, если они не существуют. Я откажусь от того, что это может быть менее идеальным, потому что оно срабатывает на каждом маршруте, но может упростить ваши маршруты.

import { Params, RouterStateSnapshot } from '@angular/router';
import { RouterStateSerializer } from '@ngrx/router-store';

export interface RouterStateUrl {
  url: string;
  params: Params;
  queryParams: Params;
}

export class CustomSerializer implements RouterStateSerializer<RouterStateUrl> {
  serialize(routerState: RouterStateSnapshot): RouterStateUrl {
    let route = routerState.root;

    while (route.firstChild) {
      route = route.firstChild;
    }

    const {
      url,
      root: { queryParams },
    } = routerState;
    const { params } = route;

    // Add here
    if (<insert url logic> && queryParams.page === undefined) {
        queryParams.page = 0;
    }

    // Only return an object including the URL, params and query params
    // instead of the entire snapshot
    return { url, params, queryParams };
  }
}

Альтернатива 2 - Вы можете обернуть HttpClient или, что более предпочтительно, создать общий метод списка страниц, который проверяет это и добавляет его в запрос, если страницы нет. Этот ответ показывает пример того, как добиться добавления параметров.

Альтернатива 3 - Вы можете использовать страницу как часть пути и выполнять обходные пути / изменения по мере необходимости для генерации ваших запросов.

{ path: 'user/:userId/agent', redirectTo: '/user/:userId/agent/0', pathMatch: 'full' },
{ path: 'user/:userId/agent/:page', component: AgentListComponent },
0
ответ дан OneLunch Man 19 January 2019 в 14:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: