我们有一种情况,我们利用角度内的事件和路由组合来处理模块之间的导航和通信。不幸的是,这项技术似乎对我们没有用处:
这两个
Events.identifierSearch.fireOnChange(symbol);
$location.path('/explore');
也不是这个
Events.identifierSearch.fireOnChange(symbol);
$location.path('/explore');
正在工作。事件处理程序似乎没有激发。然而,我们试图证明我们的事件处理程序正确连接的一个不太理想的解决方案似乎有效:
$location.path('/explore');
$timeout(function(){
var symbol = $event.target.innerText;
Events.identifierSearch.fireOnChange(symbol);
}, 500);
现在,这不是我们想要的生产代码。实际上,“符号”将是一大组嵌套对象,因此将它们传递到路径的URL上并不理想。重写路由似乎太痛苦了,它可以很好地处理分离部分页面。
我的想法是将其分为两部分。首先触发事件并在触发它的控制器中处理事件。这需要我为活动添加一个来源 - 所以没有汗水:
var controllerName = "thisBlahController" ;
Events.identifierSearch.fireOnChange(controllerName, symbol);
然后在同一个控制器中处理事件并触发位置更改:
$scope.$on(Events.identifierSearch.onChange, function() {
var source = Events.identifierSearch.source
if(source === controllerName) {
$location.path('/explore');
}
}
再次 - 它并不理想,因为它使用的假设是在路线改变之前所有来源都处理了事件。
首先,知道角度路由中导致解散事件的内容会很棒吗?
第二次,我希望能够正式解决这个问题,一个经过战斗测试的问题。
第三,如果没有系统的解决方案,可以听听我提出的两个解决方案的意见。
快速修改
如果我使用超时方法重写订单:
Events.identifierSearch.fireOnChange(symbol);
$timeout(function(){
$location.path('/explore');
}, 1000);
功能似乎也不起作用。导致问题四部分页面的控制器,即当前的ng-view是否会将他们的事件管道连接起来?