繁体   English   中英

AngularJS - routeProvider解析调用服务方法

[英]AngularJS - routeProvider resolve calling a service method

我创建了一个检查用户登录状态的服务(如果令牌存在则记录用户,否则重定向到登录页面)。

最初我通过routeProvider解析调用了这个服务 - 这个工作完美一次,但由于Angularjs服务是单例,因此连续调用不会运行测试。

然后我尝试将测试移动到返回对象中的方法中,但是我似乎无法让routeProvider解析为调用服务的特定方法(这在某种程度上是有意义的)。

问题是,如何确保每次加载路线时都执行我的测试?

在egghead视频系列( http://www.egghead.io/video/rbqRJQZBF3Q )中,他使用分配给控制器的功能,但这似乎不是生产应用程序的正确解决方案(我不想分配)一个特定控制器的函数,我相信Angularjs依赖注入将不起作用)。

服务是单件意味着只有一个但只有时间但是如果你只是从服务返回它将被调用一次,但如果你从服务返回一个函数,它将被一次又一次地调用。见下面的样本工作

var app = angular.module('ajay.singhApp', [])
  .config(['$routeProvider', function($routeProvider) {
    $routeProvider
      .when('/view1', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl',
        resolve: {
            myVar: function (repoService) {
                return repoService.getItems().then(function (response) {
                    return response.data;
                });
            }
        }
      })
        .when('/view2', {
            templateUrl: 'views/main.html',
            controller: 'MainCtrl'
        })
      .otherwise({
        redirectTo: '/view1'
      });
  }]);


app.factory('repoService', function ($http) {
    return {
        getItems: function () {
            return $http.get('TextFile.txt');
        }
    };
});

添加到@ Ajay的响应,您可以使用字符串而不是标准属性名称,这将有助于缩小:

resolve: {
    'myVar': function (repoService) {
        return repoService.getItems().then(function (response) {
            return response.data;
        });
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM