我有一个使用Angular UI Router并带有某些状态的简单应用程序。

实际上,我的路由器中有这种代码:

$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
    }
  });

Controller 是在另一个文件中定义的,我正在寻找一种在同一文件中定义onEnter和onExit回调的好方法。

您认为最好的解决方案是什么?全局变量应该起作用,但是它不是很漂亮。

最佳答案

您可以执行此操作,但是却又不知道这是代码的味道。您正在混合 Controller 和状态之间的逻辑,但是它们应该是分开的。

无论如何,这是您可以执行的操作:

在您的 Controller 中,注入(inject)$state对象并使用$state.get方法:

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

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

关于angularjs - 使用Angular UI Router在另一个文件中定义onEnter和onExit回调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20052982/

10-11 23:47