Angular / modal /ngDialog - Как иметь несколько контроллеров в модальном режиме с вложенными / кратными состояниями / представлениями?
Я использовал ngDialog и у меня есть модал с вложенными представлениями. Insight мой модальный Я переключаюсь между регистрацией (состояние) и логин (логин), поэтому мне нужно включить контроллер для регистрации и один для входа. Я искал решение в течение нескольких часов, но ничего не смог найти. Кто-нибудь, как я могу это сделать? Если кто-то знает решение НЕ для ngDialog, а для $ modal, пожалуйста, дайте мне знать. Спасибо!!
$scope.clickToOpen = function () {
ngDialog.open({
template: 'js/modal/modal.html',
controller: 'SignupCtrl',
});
};
В приведенном выше коде все работает найти для регистрации, потому что я включил его контроллер, но не для входа в систему, так как я не знаю, как включить контроллер входа в систему. Также, если это важно, я добавлю больше кода - просто подумал, что это не имеет значения для моего вопроса.
То, что я тоже попробовал, это:
app.config(function ($stateProvider) {
$stateProvider.state('activity.modal', {
url: 'modal',
templateUrl: 'js/modal/modal.html',
views: {
'loginView@': {
templateUrl: 'js/login/login.html',
controller:'LoginCtrl'
},
'signupView@': {
templateUrl: 'js/signup/signup.html',
controller:'SignupCtrl'
}
}
});
});
но это не работает ни для входа в систему, ни для регистрации.
1 ответ
Есть несколько решений этой проблемы. Некоторые из них лучше, чем другие, но, в конце концов, это зависит от того, какой интерфейс вы ищете.
Один диалог с объединенными контроллерами (возможно, худший подход)
Вы можете использовать только один диалог с одним шаблоном, но вы должны объединить контроллеры, чтобы новый контроллер мог обрабатывать логику входа и регистрации.
Два разных диалога
Вы можете открыть разные ngDialog
всплывающие окна - одно для входа, другое для регистрации. Они будут вызваны различными кнопками в вашем представлении.
Например, наличие двух кнопок ("Войти" и "Зарегистрироваться"), где кнопка "Вход" отображает диалоговое окно "Вход", а кнопка "Зарегистрироваться" - диалоговое окно "Регистрация".
Используйте компоненты в диалоге (возможно, лучший подход)
Вы можете открыть один ngDialog
Например, в шаблоне вы можете использовать два разных компонента - один для входа в систему и один для регистрации. Каждый компонент будет иметь свой собственный отдельный шаблон и контроллер, и, таким образом, правило разделения интересов по-прежнему будет применяться.
Дополнительным преимуществом последнего подхода является то, что вы можете использовать эти компоненты в любом месте на вашем сайте - не только ngDialog
шаблон.