Angular / modal / ngDialog - 如何在具有嵌套/多个状态/视图的模态中拥有多个控制器?

时间:2017-06-02 10:30:19

标签: angularjs modal-dialog modalviewcontroller ng-dialog

我使用了ngDialog并且有一个带嵌套视图的模态。洞察我的模态我在注册(状态)和登录(登录)之间切换所以我需要包含用于注册的控制器和用于登录的控制器。我一直在寻找解决方案几个小时,但找不到任何东西。有人怎么能这样做?如果有人知道解决方案不是针对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 个答案:

答案 0 :(得分:2)

这个问题有多种解决方案。其中一些比其他更好,但最终,它取决于您正在寻找什么样的UI / UX。

合并控制器的一个对话框(可以说是最糟糕的方法)

您只能使用一个对话框和一个模板,但您必须将控制器合并在一起,以便新控制器可以同时处理登录和注册逻辑。

两个不同的对话

您可以打开不同的ngDialog弹出窗口 - 一个用于登录另一个弹出窗口以进行注册。这些将由您视图中的不同按钮触发。

例如,有两个按钮(登录和注册),其中“登录”按钮将显示“登录”对话框,“注册”按钮将显示“注册”对话框。

在对话框中使用组件(可以说是最好的方法)

您可以打开一个ngDialog实例,在模板中,您可以使用两个不同的组件 - 一个用于登录,另一个用于注册。每个组件都有自己独立的模板和控制器,因此关注点分离规则仍然适用。

最后一种方法的额外好处是,您可以在网站的任何位置使用这些组件 - 而不仅仅是ngDialog模板。