alexsobolenko
@alexsobolenko
Программист

Как реализовать страницу подтверждения перехода по внешней ссылке в одностраничном приложении на Vue.js?

Блог пишется на Vue.js. В постах блога будут попадаться ссылки на внешние ресурсы. Нужно сделать страницу, на которой будет следующая информация:
"Вы переходите по внешней ссылке. Если не хотите ждать, то нажмите сюда. Если не хотите переходить, то нажмите туда, иначе через 10 секунды перейдете туда автоматически."
Текст поста в редакторе я оформляется с помощью BB-кода, который потом переводится в html-теги. Внешние ссылки обретают вид текст.
Вот вырезка из функции переводящей BB-код в html-теги:
// BB-код
$in = array(
   ...
   '/\[url\="?(.*?)"?\](.*?)\[\/url\]/ms',
   ...
);
// html-теги
$out = array(
   ...
   '<a href="#/go/\1">\2</a>',
   ...
);
$text = preg_replace($in, $out, $text);

Вопрос, собственно, в том, как заставить vue-router их воспринимать. Пробовал три варианта:
{ path: '/go/:p1/:p2/:p3/:p4/:p5/:p6/:p7/:p8/:p9/:p10', component: AppGoAway },
{ path: '/go/:link', component: AppGoAway },
{ path: '/go/', component: AppGoAway },

но ни один не дал результат, и ссылка "/#/go/https://lenta.ru/news/2017/11/07/pochtagoda/" определяется как ошибка 404, подпадая под параметры этой настройки
{ path: '*', component: App404 }

Предположительно мои варианты настройки Vue-router не увенчались успехом, потому что он видит в ссылке несколько параметров после go.В официальной документации Vue.js и Vue-router на русском я не нашел ничего о динамическом количестве параметров в $route.params, или чего-то подобного.

Возможно следует при переводе ссылки из BB-кода в html кодировать url, но я не силён в регулярных выражениях. Функцию перевода я взял с сайта редактора markItUp.
  • Вопрос задан
  • 600 просмотров
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
А нельзя делать /go?link=http://elsewhere.com/blalba
а в компоненте AppGoAway проверять $route.query ну и вообще вотчить $route?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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