我有一个简单的应用程序使用Angular UI路由器和一些状态。
实际上我的路由器中有这种代码:
$stateProvider.state('map.layers', {
url: '/layers',
templateUrl: 'views/layers.html',
controller: 'LayersCtrl',
onEnter: function(map: Master.Map) {
// do stuff
},
onExit: function(map: Master.Map) {
// do stuff
}
});
控制器在另一个文件中定义,我正在寻找一种在同一文件中定义onEnter和onExit回调的好方法。
在您看来,什么是最佳解决方案?一个全局变量应该可以工作,但它不是很漂亮。
答案 0 :(得分:4)
你可以这样做,但它不知道更多这是代码味道。你在控制器和状态之间混合逻辑,但它们应该是分开的。
无论如何,这是你如何做到这一点:
在控制器中,注入$state
对象并使用$state.get
方法:
.controller('layersCtrl', function($state) {
$state.get('map.layers').onEnter = blah;
$state.get('map.layers').onExit = blahblah;
});
但不是这样,我建议您将此共享功能提取到服务中。如果你发现很难做到这一点,那么我会深入研究你的代码,因为模块之间似乎有太多的耦合。