Angularjs对话框在关闭时调用另一个控制器函数

时间:2018-02-17 09:51:41

标签: angularjs angularjs-material

AngularJs:

我试图显示编辑模式框。为此,我使用了AngularJs材料设计的$ mdDialog。这是我的代码:

angular.module('main').controller('UserCtrl', ['$scope', function($scope){
    function loadUser(){
       ...
    }

    function showEditSale(index) {
        var sale = $scope.user.Sales[index];
        $mdDialog.show({
                clickOutsideToClose: true,
                fullscreen: $scope.customFullscreen,
                parent: angular.element(document.body),
                locals: {
                    sale: sale
                },
                templateUrl: 'front/templates/user/edit-sale.html',
                controller: 'UserSaleCtrl'
            })
            .then(function(answer) {
            }, function() {
            });
    }
}]);
angular.module('main').controller('UserSaleCtrl', ['$scope', function($scope, sale){
     $scope.sale = sale;

     function updateSale(){
         ...
         **Need to reload user**
     }
}]);

当我点击针对用户销售的编辑按钮时,我调用 showEditSale 传递user.Sales项的索引。将显示一个弹出窗口,我可以在那里编辑值。点击更新时,会调用api来更新销售信息。

问题是我想重新加载此用户。要重新加载,我必须从另一个控制器调用函数。

我的问题是:

  1. 有没有其他方法可以将数据传递到对话框而不是在控制器中注入?

  2. 我是否必须使用AngularJs的emit事件来调用另一个控制器的函数?

  3. 我可以以某种方式使用相同的控制器吗?我试过了,但我认为$ scope正在重置模态对话框。

1 个答案:

答案 0 :(得分:1)

我在UserSaleCtrl中添加了以下代码:

function updateSale(){
     ...
     $rootScope.$broadcast('reloadUser');
}

在UserCtrl中添加了以下代码:

$scope.$on('reloadUser', function(event) {
    loadUser();
});