由于$ location.path更改了范围,因此无法传递Popup中的消息

时间:2015-04-14 03:09:50

标签: angularjs angularjs-scope

如果用户按下按钮进行保存,则会出现以下逻辑:

Popup.notifyPopup($scope, "Saved...")
$location.path('/changeView');

Popup.notifyfyPopup函数是用于将第二个参数中的消息设置到作用域中并在通知弹出窗口中通知消息的函数。

function notifyTopNotification(scope,msg){

        sharedProperties.setNotifyMsg(msg);

        ngDialog.open({

             template: 'notifyTopNotification',
             controller: function() {4
                 $scope.notifyMsg = sharedProperties.getNotifyMsg();
             },
             className: 'ngdialog-close',
             scope: $scope
         });

         setTimeout(1000);
 };  

notifyPopup:function(scope,msg){

        $scope = scope;
        notifyTopNotification($scope, msg);
    }

大多数情况下,它有效。但是location.path()后面的函数不起作用。因为location.path()函数改变了范围。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

如果您尝试在范围之间传递消息,则可能需要使用$ broadcast发送和$ on来监听广播。但请注意,您必须已经实例化接收控制器,否则它将无法工作。在这种情况下,您将首先启动状态更改(这将实例化接收控制器),然后$广播该消息。

如果范围之间存在父/子关系,则以下情况有效:

function firstCtrl($scope){
$scope.$broadcast('someEvent', [1,2,3]);
}

function secondCtrl($scope){
$scope.$on('someEvent', function(event, mass) {console.log(mass)});
}

但如果没有,则需要使用$ rootScope:

function firstCtrl($rootScope){
$rootScope.$broadcast('someEvent', [1,2,3]);
}

广播将来自父作用域的消息向下触发到子作用域。如果你需要向上游发送消息,你做同样的事情,但你需要使用$ emit而不是$ broadcast。

文档中还提供了更多信息: https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope