2017-04-10 72 views
0

第一次当我点击链接打开对话框时,它只打开一次。但从第二次开始,它分别在第二次,第三次,第四次点击中开启了两次,四次,八次。为什么它多次打开?ngDialog多次打开

HTML代码:header.html中

<li><a href data-ng-click="chatBotFunction()" chat-bot>Chat</a></li> 

JS代码:headerCtrl.js

$scope.chatBotFunction = function() { 
    $rootScope.$emit("CallChatMethod",{}); 
} 

chatCtrl.js

$rootScope.$on("CallChatMethod", function(){ 
    $scope.openChatBox(); 
}); 

$scope.openChatBox = function() { 
    ngDialog.openConfirm({ 
     template: 'modules/main/views/chatBot.html', 
     controller: 'chatCtrl', 
     closeByDocument: false, 
     closeByEscape: false, 
     showClose: false, 
     scope: $scope 
    }).then(

    ); 
}; 

有人请帮我解决这个问题。提前致谢。

回答

1

问题是,如果使用$rootScope.$on,即使导航到其他页面,相应的控制器也不会销毁。因此,与$scope.$on

$scope.$on("CallChatMethod", function(){ 
    $scope.openChatBox(); 
}); 

$scope.$broadcast is for when publishing from parent to child
$scope.$emit is for when publishing from child to parent

尝试让我KNW如果您仍然面临着问题。

+0

我担心它可能无法正常删除监听器。我相信$ rootScope。$ emit只允许其他$ rootScope侦听器捕获它提到http://stackoverflow.com/questions/26752030/rootscope-broadcast-vs-scope-emit –

+0

试试看.. ..肯定会工作。所有的作品都只在原型概念下工作 – Srigar

+0

你可以检查这个小提琴https://jsfiddle.net/U3pVM/31464/。 $ emit –

0

您需要删除范围听者破坏事件

var callChatListener = $rootScope.$on("CallChatMethod", function(){ 
    $scope.openChatBox(); 
}); 

下面的代码会从$ rootscope

$scope.$on("$destroy", function(){ 
    callChatListener(); 
}); 
+0

我得到一个错误,'TypeError:callChatListener不是函数' – Kavipriya

+0

编辑答案。现在检查 –

+0

同样的错误。 'TypeError:this.callChatListener不是函数' – Kavipriya