0

私はngDialogでAngularを使用しています。私のビューには、ユーザーの詳細を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 を使用する必要があります。

ユーザーコントローラー

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 に答える
0

これら 2 つのコントローラーは同じスコープを使用していないため、$rootScope代わりに使用します。$scope

于 2015-01-30T12:21:48.517 に答える