我已经完成了项目的设置:
app1和app2是放在同一页面上的两个模块,都注入了mainApp。
我正在尝试使用在mainApp中定义的EventBus工厂在app1和app2之间进行通信。 不幸的是,我无法让它工作(app1没有捕获app2事件,相反)。
我该如何解决?我采取了错误的做法吗?
EventBus.subscribe("App1Ctr.event", function (event, data) {
console.log("App2handler");
$scope.name = data.newVal;
});
$scope.fireEvent = function () {
EventBus.broadcast("App2Ctr.event", {"newVal": "App2Ctr"});
};
这是plnkr
答案 0 :(得分:0)
您需要更改注入依赖项的方式。您的main.js
需要包含此内容:
var mainApp = angular.module("mainApp", ["app1", "app2"])
您的两个app1.js
和app2.js
可以从mainApp
中删除相关性要求:
var app1 = angular.module("app1", [])
和
var app2 = angular.module("app2", [])
index.html
中的初始化代码变为
<script>
angular.element(document).ready(function() {
angular.bootstrap(document, ["mainApp"]);
});
</script>
您还需要更改对{{name}}
的引用,以便它们包含一个点(因为角度中的整个原型继承事物)。有关$broadcast
,$emit
,$on
和$rootScope
的详细信息,请参阅this plunkr和this question。
答案 1 :(得分:0)
我设法找到了解决方案。 EventBus中的广播方法应该类似于:
_broadcast = function(eventName, data) {
console.log("EventBus broadcast: " + eventName);
angular.element(document.getElementById('app1')).scope().$root.$emit(eventName, data);
};
由于必须通过ID获取角度应用,我还将使用EventDispatcher来处理此问题。