Javascript AngularJS-routeProvider解析调用服务方法
我已经创建了一个检查用户登录状态的服务(如果令牌存在,请登录用户,否则重定向到登录页面) 最初,我通过routeProvider resolve调用了该服务——这只运行了一次,但由于Angularjs服务是单例的,所以测试不会连续运行 然后,我尝试将测试移动到返回对象中的一个方法中,但我似乎无法让routeProvider解析调用服务的特定方法(这在某种程度上是有意义的) 问题是,如何确保每次加载路由时都执行测试Javascript AngularJS-routeProvider解析调用服务方法,javascript,angularjs,Javascript,Angularjs,我已经创建了一个检查用户登录状态的服务(如果令牌存在,请登录用户,否则重定向到登录页面) 最初,我通过routeProvider resolve调用了该服务——这只运行了一次,但由于Angularjs服务是单例的,所以测试不会连续运行 然后,我尝试将测试移动到返回对象中的一个方法中,但我似乎无法让routeProvider解析调用服务的特定方法(这在某种程度上是有意义的) 问题是,如何确保每次加载路由时都执行测试 在egghead视频系列()中,他使用了一个分配给控制器的函数,但这似乎不是生产应
在egghead视频系列()中,他使用了一个分配给控制器的函数,但这似乎不是生产应用程序的正确解决方案(我不想将函数分配给特定的控制器,我相信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;
});
}
}
谢谢,行得通。虽然这仍然感觉像是一个工作。希望有一个更简单的解决方案:(如何使用返回的response.data?在您的控制器中,在本例中是MainCtrl,将$route作为依赖项注入,$route.current.locals.myVar将包含数据。更好的是,如果您将'data'作为其依赖项注入控制器,它将是解析的数据。此代码在缩小后是否可以工作?据我所知
myVar:函数(repoService)
一旦缩小就会停止工作,要解决这个问题,您需要显式地处理repoService的注入。或者我错了?参数注入数组表示法呢?缩小将破坏示例代码,函数的重命名将完成?当然我可以使用$inject,但这并不容易。。。