Я готовлю сайт SPA, содержащий сотни страниц, похожих на статьи (помимо электронной коммерции, логин и т.д.). Каждая статья имеет свой собственный URL. Я хочу это реализовать, используя Angular2. Единственное решение, которое я нашел до сих пор:
1. подготовить сотни компонентов Agular2, один компонент для каждой статьи...
... с templateUrl, указывающим на разметку статьи. Поэтому мне понадобятся сотни компонентов, похожих на:
@core.Component({
selector: 'article-1',
templateUrl: 'article1.html'
})
export class Article1 {}
2. для отображения статьи с использованием AsyncRoute
см. Ленивая загрузка компонентов маршрута в Angular2
@core.Component({
selector: 'article-wrapper',
template: '<router-outlet></router-outlet>'
})
@router.RouteConfig([
new router.AsyncRoute({
path: '/article/:id',
loader: () => {
switch (id) {
case 1: return Article1;
case 2: return Article2;
//... repeat it hundreds of times
}
},
name: 'article'
})
])
class ArticleWrapper { }
В Angular1 существует директива ngInclude, которая отсутствует в Angular2 из-за проблем безопасности (см. здесь).
[Редактировать 1] Существует не только проблема с самим кодом. Проблема также в статической природе этого решения. Если мне нужен сайт с картой сайта и динамической структурой страницы - добавление отдельной страницы требует перекомпиляции всего модуля JavaScript ES6.
[Edit 2] Концепция "разметка x html как данные" (где разметка - это не только статический HTML, но и HTML с активными компонентами) - это базовая концепция всей сети (каждая CMS имеет свои данные разметки в базе данных). Если для него не существует решения Angular2, оно отрицает это основное понятие. Я считаю, что должен существовать какой-то трюк.