Angular 2 Маршрут до неъглов URL адрес, включително параметри на низ на заявка

Опитвам се условно да пренасоча angular 2 маршрут към външен URL адрес, включително параметри на низ на заявка.

Т.е. потребителят ще щракне върху връзка в падащото меню на бутона на потребителския профил и ако сървърът преди това е посочил, че принадлежи към конкретна компания, ще се свърже към външна страница, в противен случай същият бутон ще премине през нормалните ъглови системи за маршрутизиране на приложения с една страница.

Настоящият ми подход включва абониране за събитието за стартиране на навигация и промяна на местоположението на прозореца href, за да сочи към външния уебсайт.

Сблъсквам се с два различни проблема в зависимост от това как подхождам към тази задача

1.

Ако низът на заявката се предава заедно с пътя на routerLink, низовете на заявката се екранират, преди да бъдат предадени на отдалечения уебсайт.

Ако коригирам това в абонамента, бутонът за връщане назад на браузъра пак ще се върне към некоригирания URL адрес.

Например следния код

в html шаблона.

    <a [routerLink]="['/profile?id=1']" > profile </a>

и в app.component

    this.router.events.subscribe((event) => {
       if (event instanceof NavigationStart) {
             if(conditional logic here){  
                 let url: string = "http://example.com" + event.url
                 window.location.href = url;
             }
          }
    }

води до URL адрес http://example.com/profile%3Fid%3D1

Ако заменя екраните в абонамента си, той става http://example.com/profile?id=1, но бутонът за връщане назад на браузъра отива до повредения URL адрес и зарежда страница за грешка.

2.

Поради грешките по-горе се опитах да предам низа на заявката чрез параметъра give в връзката на рутера, както е описано в следния SO въпрос.

Как да обработвате параметри на заявка в angular 2

новата връзка към рутера изглежда така

профил

и води до URL като следния http://example.com?0=%3F&1=i&2=d&3=%3D&4=1

Това изглежда използва дъщерното маршрутизиране и следователно матрични параметри, както е споменато в публикацията.

Не съм сигурен защо това е така, тъй като моят routing.ts е прост и не съдържа деца.

const routes: Routes = [
{path: '**', component: RouteComponent}];

@NgModule({
    imports: [ RouterModule.forRoot(routes) ],
    exports: [ RouterModule ]
})
export class RoutingModule { }

Освен това изглежда, че все още избягва специални знаци

Първият ми въпрос е дали има официален или по-добър начин за пренасочване на ъглово маршрутизиране към външни уебсайтове (включително параметри на низ на заявка)

Ако не, ще се радвам на всякакви идеи как да го направя

а. предотвратяване на angular от избягване на параметрите на низа на заявката

b. не позволява на бутона за връщане назад да разпознае URL адреса, преди да заменя екранираните знаци. (нещо като отмяна на събитието за стартиране на навигация)

° С. предотвратяване на angular от преобразуване на параметрите в матрични параметри.

Благодарим ви за всяка помощ, която можете да предоставите


person Elliot Rieflin    schedule 20.03.2017    source източник
comment
Успях да разреша този проблем функционално, като добавих инструкция за skipLocationChange към връзката на рутера. Все още смятам, че това е тромаво решение, така че все пак ще оценя предложения   -  person Elliot Rieflin    schedule 21.03.2017