使用Angular UI Router在另一个文件中定义onEnter和onExit回调

e74*_*dbf 6 code-organization angularjs angular-ui angular-ui-router

我有一个简单的应用程序使用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
    }
  });
Run Code Online (Sandbox Code Playgroud)

控制器在另一个文件中定义,我正在寻找一种在同一文件中定义onEnter和onExit回调的好方法.

在您看来,什么是最佳解决方案?一个全局变量应该可以工作,但它不是很漂亮.

And*_*erg 4

你可以这样做,但是在不了解更多的情况下这是一种代码味道。您在控制器和状态之间混合逻辑,但它们应该是分开的。

无论如何,您可以按照以下方法执行此操作:

在您的控制器中,注入$state对象并使用该$state.get方法:

.controller('layersCtrl', function($state) {
  $state.get('map.layers').onEnter = blah;
  $state.get('map.layers').onExit = blahblah;
});
Run Code Online (Sandbox Code Playgroud)

但我建议您将此共享功能提取到服务中,而不是这样。如果您发现很难做到这一点,那么我会深入研究您的代码,因为模块之间似乎存在太多耦合。

  • 我提出的一个建议是使用“$state.current.onExit = blahblah;”,因为它不会将赋值语句与状态名称结合起来。 (2认同)