Гибридное приложение Angular - маршрутизатор angular 2 не работает

Я пытаюсь запустить гибридное приложение с компонентами angular 2. Ниже приведены настройки, которые я выполнил для запуска гибридного приложения. Я могу запустить приложение, и компонент «мое приложение» также инициализируется в этом гибридном приложении, но когда я пытаюсь получить доступ к компоненту (FirstComponent) с помощью route(" /first"), он загружает FirstComponent, но автоматически перенаправляет на мой маршрут angular 1 по умолчанию.

index.html

<base href="/hybridApp/">
<my-app></my-app>

app.component.ts

@Component({
  selector: 'my-app',
  template: '<router-outlet></router-outlet>' +
  '<div ng-view></div>',
})
export class AppComponent  {
  name = 'Angular';
}

app.module.ts

@NgModule({
    imports: [
        BrowserModule,
        UpgradeModule,
        RouterModule,
        FirstModule
    ],
    declarations: [
        AppComponent
    ],
    bootstrap: [ AppComponent ]
})

export class AppModule {
    constructor(private upgrade: UpgradeModule) { }
    ngDoBootstrap() {
    }
}

первый.модуль.тс

export class Ng1Ng2UrlHandlingStrategy implements UrlHandlingStrategy {
    shouldProcessUrl(url: any) {
        return url.toString().startsWith("/first");
    }

    extract(url: any) {
        return url;
    }

    merge(url: any, whole: any) {
        return url;
    }
}

const routes : Routes = [

    {
        path :'first',

        component: FirstComponent
    }
]



@NgModule({
    imports:[
        RouterModule.forRoot(routes,{ useHash: true, initialNavigation: true, enableTracing: true })
    ],
    exports:[

    ],
    declarations:[
        FirstComponent
    ],
    providers:[
        { provide: UrlHandlingStrategy, useClass: Ng1Ng2UrlHandlingStrategy }
    ]
})
export class FirstModule {}

первый.component.ts

@Component({
    selector:'first-component',
    templateUrl:'src/app/first.component.html',
    styleUrls:['src/app/first.component.css']
})

export class FirstComponent implements OnInit{
    ngOnInit(){
        console.log("first component rendered..")
    }

    constructor(
        private route:ActivatedRoute
    )
    {}
}

main.ts

platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => {
    const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule;
    upgrade.bootstrap(document.body, ['angular1App']);
});

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

Вот журналы, как я вижу через подход, предложенный @jeffrey

NavigationStart {id: 8, url: "/first"}
   NavigationStart {id: 8, url: "/first"}
   RoutesRecognized {id: 8, url: "/first", urlAfterRedirects: "/first", state: RouterStateSnapshot}
   RoutesRecognized {id: 8, url: "/first", urlAfterRedirects: "/first", state: RouterStateSnapshot}
   GuardsCheckStart {id: 8, url: "/first", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
   GuardsCheckStart {id: 8, url: "/first", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
   GuardsCheckEnd {id: 8, url: "/first", urlAfterRedirects: UrlTree, state: RouterStateSnapshot, shouldActivate: true}
   GuardsCheckEnd {id: 8, url: "/first", urlAfterRedirects: UrlTree, state: RouterStateSnapshot, shouldActivate: true}
   ResolveStart {id: 8, url: "/first", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
   ResolveStart {id: 8, url: "/first", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
   ResolveEnd {id: 8, url: "/first", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
   ResolveEnd {id: 8, url: "/first", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
   NavigationEnd {id: 8, url: "/first", urlAfterRedirects: "/first"}
   NavigationEnd {id: 8, url: "/first", urlAfterRedirects: "/first"}
   NavigationEnd {id: 8, url: "/first", urlAfterRedirects: "/first"}
   NavigationStart {id: 9, url: "/auth"}
   NavigationStart {id: 9, url: "/auth"}
   NavigationStart {id: 9, url: "/auth"}
   GuardsCheckStart {id: 9, url: "/auth", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
   GuardsCheckStart {id: 9, url: "/auth", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
   GuardsCheckStart {id: 9, url: "/auth", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
   GuardsCheckEnd {id: 9, url: "/auth", urlAfterRedirects: UrlTree, state: RouterStateSnapshot, shouldActivate: true}
   GuardsCheckEnd {id: 9, url: "/auth", urlAfterRedirects: UrlTree, state: RouterStateSnapshot, shouldActivate: true}
   GuardsCheckEnd {id: 9, url: "/auth", urlAfterRedirects: UrlTree, state: RouterStateSnapshot, shouldActivate: true}
   NavigationEnd {id: 9, url: "/auth", urlAfterRedirects: "/auth"}
   NavigationEnd {id: 9, url: "/auth", urlAfterRedirects: "/auth"}
   NavigationEnd {id: 9, url: "/auth", urlAfterRedirects: "/auth"}

person roanjain    schedule 06.06.2018    source источник
comment
Какой маршрутизатор вы используете с приложением AngularJS?   -  person georgeawg    schedule 06.06.2018
comment
я использую нгрут   -  person roanjain    schedule 06.06.2018
comment
Вот статья о том, как Разделить маршруты между роутерами Angular 1 и Angular 2   -  person georgeawg    schedule 06.06.2018
comment
Можете ли вы также добавить части оператора импорта?   -  person Kailas    schedule 14.06.2018


Ответы (2)


Я пытаюсь использовать angularjs в форме ui-router с приложением angular 5. Теперь у меня возникли некоторые проблемы с http_interceptor, в любом случае, сначала мне нужно понизить версию компонента приложения и вставить его в мой файл index.js. во-вторых, я пытаюсь узнать, работает ли стратегия обработки URL-адресов, и angular 5 начинает управлять маршрутами. В-третьих, я должен внедрить стратегию angular5 urlHandling и маршруты из angular5 в модуль angularjs. После этого мой угловой 5 работал. Я нашел суть об этом после нескольких часов поиска.

Ссылка:

Суть

person Antonio Ribeiro    schedule 08.06.2018

Чтобы увидеть, что делает маршрутизатор до, во время и после перенаправления, добавьте это в свой FirstComponent:

constructor(
  private router: Router
) {
  this.router.events.subscribe(e => {
    console.log(e)
  });
}

Вам придется немного покопаться в журналах событий, но это может дать вам ценную информацию.


Если вы столкнулись с этой проблемой только при развертывании, попробуйте следующее:

Если вы используете сервер Apache, добавьте это в свой файл .htaccess:

RewriteEngine On
    # If an existing asset or directory is requested go to it as it is
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
    RewriteRule ^ - [L]
    # If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html

Если вы используете другой сервер, например NGinx, IIS или Firebase, ознакомьтесь с дополнительными конфигурациями здесь. в соответствии с рекомендациями команды Angular.

person Jeffrey Roosendaal    schedule 18.06.2018
comment
Это происходит в процессе разработки, так как я делаю это впервые, и ни один из моих маршрутов не работает. Также одно и то же происходит в обоих случаях, используя routerLink или напрямую вводя URL-адрес. - person roanjain; 18.06.2018
comment
Кроме того, даже когда я настраиваю свое гибридное приложение, используя этот подход github.com/manfredsteyer/ngUpgrade-without- подготовка. Я столкнулся с той же проблемой. - person roanjain; 18.06.2018
comment
Спасибо за дополнительную информацию. Я обновил свой ответ, указав способ получить много отладочной информации от маршрутизатора, вы должны попробовать. - person Jeffrey Roosendaal; 18.06.2018
comment
Джефф, я обновил вопрос соответствующими журналами, используя ваш подход. - person roanjain; 18.06.2018
comment
Спасибо. Как видите, после firstNavigationEnd запускается еще один firstNavigationStart (теперь с id: 9). Что произойдет, если вы установите initialNavigation: false? Кроме того, не добавлены ли к вашему маршрутизатору какие-либо охранники или canActivate, которые вызывают перенаправление на /auth? - person Jeffrey Roosendaal; 18.06.2018
comment
Пробовал использовать initialNavigation: false, но результат тот же. Кроме того, поскольку я также поделился настройками маршрутизатора, у меня не было никаких охранников для моих маршрутов. - person roanjain; 18.06.2018
comment
Хм, я понятия не имею, почему это происходит, и мне сложно предположить, что происходит точно во время перенаправления. Я вернусь к вам позже сегодня.. - person Jeffrey Roosendaal; 18.06.2018
comment
Все еще понятия не имею.. Может быть, вы можете опубликовать полный const routes. Я вижу, что маршрутизатор перенаправляется на /auth, но я не вижу этого в вашей конфигурации routes. - person Jeffrey Roosendaal; 18.06.2018
comment
Я только начал с настройки гибридного приложения, и на данный момент у меня есть только один маршрут в моем проекте, как указано выше. - person roanjain; 18.06.2018
comment
Тогда откуда /auth? - person Jeffrey Roosendaal; 18.06.2018
comment
По одному маршруту в приложении, я имею в виду, в angular 2. и/auth находится в angularjs - person roanjain; 22.06.2018