Сначала вам необходимо определить свои маршруты как обычно в приложениях с угловым 1.x и 2.x.
app.config(function($routeProvider) {
$routeProvider
// route for the home page
.when('/', {
templateUrl : 'pages/home.html',
controller : 'mainController'
})
// route for the about page
.when('/about', {
templateUrl : 'pages/about.html',
controller : 'aboutController'
})
// route for the contact page
.when('/contact', {
templateUrl : 'pages/contact.html',
controller : 'contactController'
});
});
И Угловая 2 Module
:
Module.config(($routeProvider) => {
$routeProvider
.when('/user/:id', {template : '<user-details></userdetails>'})
.when('/users', {template : '<user-list></userlist>'});
});
Вы можете создать класс под названием Ng1Ng2UrlHandlingStrategy
и там разделите ваши маршруты между ними:
class Ng1Ng2UrlHandlingStrategy implements UrlHandlingStrategy {
shouldProcessUrl(url) { return url.toString().startsWith("/home") || url.toString().startsWith("/aboute") || url.toString().startsWith("/contact"); }
extract(url) { return url; }
merge(url, whole) { return url; }
}
И в главном компоненте:
providers: [
// Providing a custom url handling strategy to tell the Angular 2 router
// which routes it is responsible for.
{ provide: UrlHandlingStrategy, useClass: Ng1Ng2UrlHandlingStrategy }
]
Наконец, обновите компонент root
, чтобы включить розетку с угловым 2-мя маршрутизаторами.
@Component({
selector: 'root-cmp',
template: `
<router-outlet></router-outlet>
<div class="ng-view"></div>
`,
})
export class RootCmp {}
Благодарим за информативный ответ. Существует недостающая часть: как передать состояния из ng2 в ng1? Я ищу выражение «$ state.go» в компоненте ng2. – einav
В этом суть, все маршруты обрабатываются ng2, и этот класс решает, какие пути обрабатывать, а какие нет, взгляните на логику at shouldProcessUrl – Yaser
. Мой mustProcessUrl всегда вызывается с помощью '/' (никогда с фактическим url, который я положил) – Kesty