0

我正在使用 ngDialog 的角度。我在我的视图中有一个带有编辑按钮的用户列表,该按钮在 ngDialog 中打开用户详细信息。现在,当我将数据保存在我的 ngDialog 中时,我希望更新用户列表。

我想为此使用观察者模式。但是处理程序不会触发。

这是我的代码:

用户控制器

angular.module('myApp')
 .controller('UserController', function($scope, User){

    //this method gets fired when the dialog is saved
    $scope.update = function(user)
    {
        User.update(user);
        $scope.$broadcast('refresh-users');
        return true;
    }

});

用户控制器:

angular.module('myApp')
 .controller('UsersController', function($scope, User, ngDialog){

    var loadUsers = function(users) {
        $scope.users = users;
    }

    var handleErrors = function(response) {
        console.error(response)
    }

    $scope.userPopup = function(id)
    {
        ngDialog.open(
            {
                template:'../partials/user.html',
                controller: 'UserController',
                data: {'id': id},
                scope: $scope
            });
    }
    $scope.$on('refresh-users', function handler(){
        console.log('handler');
        User.getAll()
            .then(loadUsers)
            .catch(handleErrors);
    });

});

我怎么能解决这个问题?

4

2 回答 2

0

使用$rootScope而不是$scope因为这两个控制器没有使用相同的范围。

于 2015-01-30T12:21:48.517 回答
0

如前所述,如果您尝试通信的内容在另一个范围内,您希望使用 $rootScope 进行广播。

用户控制器

angular.module('myApp')
 .controller('UserController', function($scope, $rootScope, User){

    //this method gets fired when the dialog is saved
    $scope.update = function(user)
    {
        User.update(user);
        $rootScope.$broadcast('refresh-users');
        return true;
    }

});

用户控制器:

angular.module('myApp')
 .controller('UsersController', function($scope, $rootScope, User, ngDialog){

    var loadUsers = function(users) {
        $scope.users = users;
    }

    var handleErrors = function(response) {
        console.error(response)
    }

    $scope.userPopup = function(id)
    {
        ngDialog.open(
            {
                template:'../partials/user.html',
                controller: 'UserController',
                data: {'id': id},
                scope: $scope
            });
    }
    $rootScope.$on('refresh-users', function handler(){
        console.log('handler');
        User.getAll()
            .then(loadUsers)
            .catch(handleErrors);
    });

});
于 2015-01-30T12:37:24.913 回答