我在兩個單獨的控制器(在兩個單獨的JS文件中)有兩段代碼;一個觸發一個Angular $scope.$broadcast
事件,另一個觸發器爲$scope.$on
。
第一控制器(文件)片段:
var Controller1 = function($scope) {
$scope.triggerMyEvent = function(){
$scope.$broadcast('triggeredEvent');
}
$scope.go = function (path) {
$location.path(path);
};
}
第二控制器(文件)片段:
var Controller2 = function($scope) {
$scope.$on('triggeredEvent',function(event){
console.log('found triggered event');
});
}
應用程序被連接在一起,如下所示:
var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {
$routeProvider
.when("/page2", {
controller : Controller2
template : "/page2.html"
})
.otherwise({
template : "<p>Error</p>"
});
});
第一控制器由index.html文件中的ng-controller
指令引用;和上面列出的其它文件,page2.html被引用,並從所述索引操作加載:
的index.html:
<body ng-controller="Controller1">
<button ng-click="go('/page2.html')">Page 2</button>
</body>
我第一次加載這個代碼被觸發$scope.$broadcast
事件和$scope.$on
聽衆抓住它就好;如果我重新加載它,但$scope.$on
偵聽器無法捕捉它。要清楚的是,在初始加載時,事件被觸發並捕獲得很好;所以當重新啓動我的服務器並訪問頁面。但是,如果我刷新頁面(F5),我認爲該事件正在被解僱,但未被捕獲。我是新來的,所以我假定缺乏知識,但是我已經閱讀了$ scope/$ rootScope和$ broadcast/$ emit/$ on之類的東西。任何幫助表示讚賞。我看到一些關於相關問題的文章;沒有看到任何緊密相關的事物;雖然我也注意到這篇文章:
Angular $broadcast only updating after page refresh
AngularJS event-based communication through isolate scope
最有前途的引用,我相信有關隔離範圍,但我一直沒能得到任何工作還沒有。
我們需要看到你的代碼的其餘部分。這是根本沒有足夠的信息來回答你的問題。如何調用'triggerMyEvent'?有沒有相關的模板可以顯示?讓我們來看看控制器定義 –
嗨,謝謝,我會嘗試添加更多相關的代碼;但是我只是簡單地調用函數並使用控制檯日誌記錄(上面未顯示)來查看它每次都被觸發。 – Gedalya
我更新了代碼以提供更完整的圖片。 – Gedalya