Прямо сейчас в проекте angular ui-router не было ничего явного о компонентах angular 1.5. Мое требование к проекту - использовать вложенные состояния, и я хочу использовать компоненты angular 1.5, чтобы легко перейти на angular 2. Я ищу лучший шаблон для обоих. Поддерживаются варианты 1,2 и 4 по ссылке ниже. Я хочу знать, что является оптимальным вариантом для вложенных состояний и для перехода на angular 2.
Как использовать компоненты angular 1.5 с состояниями ui-router
Ответы (1)
Я только что поделился этим решением с приятелем. Не уверен, что он соответствует вашим точным требованиям, но с UI-Router 1.0.0 вы можете маршрутизировать непосредственно к компоненту. Чтобы сделать еще один шаг вперед, с вложенными состояниями мы можем указать конкретный компонент в именованном представлении. Затем мы связываемся с нашим дочерним состоянием в разметке, используя ui-sref
. Когда это состояние становится активным, активируется и компонент его представления.
Если вы хотите сделать эти представления динамическими, скажем, на основе роли пользователя, вы можете использовать функцию templateProvider
. Однако с помощью templateProvider вы не можете использовать компонент для определения представления, поэтому вам, возможно, придется просто вернуть тег компонента.
e.g. <editAdminProfileForm></editAdminProfileForm>
Подробнее об условных представлениях с помощью templateProvider см. мой другой ответ здесь: Angularjs ui-router : условные вложенные представления имени
А вот еще немного информации о UI-Router с компонентами:
https://ui-router.github.io/guide/ng1/route-to-component
https://ui-router.github.io/docs/latest/interfaces/ng1.ng1statedeclaration.html#component
app.js
...
.state('app', {
abstract: true,
templateUrl: 'templates/user-profile.html',
})
.state('app.profile', {
url: '/profile',
views: {
'profile': {
component: 'userProfile'
}
}
})
.state('app.profileEdit', {
views: {
'editProfile': {
component: 'editProfileForm'
}
}
});
user-profile.html
<ui-view>
<div ui-view="profile"></div>
<div ui-view="editProfile"></div>
</ui-view>
user-profile-component.js
profile-edit-component.js
yourApp.component('userProfile', { ... });
yourApp.component('editProfileForm', { ... });
user-profile-component.html
<button type="button" ui-sref="app.profileEdit()">Edit Profile</button>
template: '<edit-profile-form></edit-profile-form>'
- person Desmond; 21.12.2016