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 шаблон.

Другие вопросы по тегам