我在两个单独的控制器(在两个单独的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