Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 使用Angular UI Router在另一个文件中定义oneter和onExit回调_Angularjs_Angular Ui_Code Organization_Angular Ui Router - Fatal编程技术网

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

Angularjs 使用Angular UI Router在另一个文件中定义oneter和onExit回调,angularjs,angular-ui,code-organization,angular-ui-router,Angularjs,Angular Ui,Code Organization,Angular Ui Router,我有一个简单的应用程序,使用一些状态的AngularUI路由器 实际上,我的路由器中有这样的代码: $stateProvider.state('map.layers', { url: '/layers', templateUrl: 'views/layers.html', controller: 'LayersCtrl', onEnter: function(map: Master.Map) { // do stuff }, onEx

我有一个简单的应用程序,使用一些状态的AngularUI路由器

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

$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
    }
  });
控制器是在另一个文件中定义的,我正在寻找一种在同一个文件中定义oneter和onExit回调的好方法


在你看来,什么是最好的解决方案?全局变量应该可以工作,但它不是很漂亮。

您可以这样做,但不需要知道更多,这是一种代码味道。您正在控制器和状态之间混合逻辑,但它们应该是分开的

无论如何,以下是您可以做到这一点的方法:

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

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

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

我的一个建议是使用
$state.current.onExit=blahblah因为它不会将赋值语句与状态名称耦合。