在两个角度js控制器中实现常用方法以打开常见的html页面

时间:2017-05-01 13:24:38

标签: javascript jquery html angularjs

我正在开发AngularJS应用程序,我需要在创建项目时显示常用弹出窗口。对于所有应用程序,弹出窗口都是相同的,但每个调用控制器的保存和关闭方法的实现都会有所不同。

下面是常见的html页面代码:

saveItem.html

  <div class="modal-header">
        <i class="fa fa-times-circle" data-dismiss="modal" aria-hidden="true" ng-click="vm.closeItem()" style="color: #061530;font-size: 25px;float: right;" role="button" tabindex="0"></i>
    </div>
    <div class="modal-footer">
    <button class="btn btn-primary" type="button" class="close" data-dismiss="modal" aria-hidden="true"
            ng-click="vm.createItem()">Create another item
    </button></div>

我使用ngDialog打开常用页面。下面的代码用于打开html页面:

FirstController SecondController

ngDialog.open({
                      template: 'app/confirmation/saveItem.html',
                      scope: $scope,
                      showClose: false
                   });

我想要什么?

我想在FirstController和SecondController中实现createItem()closeItem()方法的不同实现。

但是当我在 -

中实现这两种方法时

FirstController:

function closeItem() {
           ngDialog.close();
         }

 function createdItem() {
          //implemtation on FirstController
         }

SecondController

function closeItem() {
               ngDialog.close();
             }

    function createdItem() {
              //implemtation on SecondController
             }

但它只在FirstController中工作。如何在两个控制器中编写不同的实现?

还有什么办法可以用ngDialog来保存以前的状态吗?

2 个答案:

答案 0 :(得分:1)

ngDialog的文档中,您可以指定要用于对话框的控制器:

  

如有必要,将用于对话框窗口的控制器。该   控制器可以通过名称或直接引用来指定   内联。

ngDialog.open({
    template: 'externalTemplate.html',
    controller: 'SomeController' });

一种方法是为每种情况加载不同的控制器:

function openFirstDialog() {
  ngDialog.open({
    template: 'app/confirmation/saveItem.html',
    scope: $scope,
    showClose: false,
    controller: 'FirstController'
  });
}

function openSecondDialog() {
  ngDialog.open({
    template: 'app/confirmation/saveItem.html',
    scope: $scope,
    showClose: false,
    controller: 'SecondController'
  });
}

另一种解决方案是使用$scope变量来决定操作:

function openFirstDialog() {
  $scope.firstController = true;
  ngDialog.open({
    template: 'app/confirmation/saveItem.html',
    scope: $scope,
    showClose: false
  });
}

function openSecondDialog() {
  $scope.firstController = false;
  ngDialog.open({
    template: 'app/confirmation/saveItem.html',
    scope: $scope,
    showClose: false
  });
}

然后检查对话框控制器中的$scope变量:

function closeItem() {
  ngDialog.close();
}

function createdItem() {
  if($scope.firstController) {
    //implemtation on FirstController, go to page 1
  }
  else {
    //implemtation on SecondController, go to page 2
  }
}

答案 1 :(得分:1)

将方法添加到您为对话框提供的范围:

new Handler().postDelayed(new Runnable(){
   @Override
   public void run(){
       statusDialog.dismiss();
       sendMailActivity.startActivity(new Intent(sendMailActivity, ...));
   }
}, 3000);