2017-04-10 69 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