父视图不会更新

时间:2015-01-30 11:52:38

标签: angularjs ng-dialog

我正在使用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;
    }

});

UsersController:

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);
    });

});

我怎么解决这个问题?

2 个答案:

答案 0 :(得分:0)

使用$rootScope代替$scope,因为这两个控制器没有使用相同的范围。

答案 1 :(得分: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;
    }

});

UsersController:

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);
    });

});