ac3*_*360 13 javascript angularjs angular-ui-router
我正在使用具有解析功能的Angular UI-Router,但是当我缩小resolve函数时,我的整个应用程序都会中断,因为解析函数语法对于缩小是不正确的.这需要根据所列出是字符串注入这里.我只是不确定如何写它.有什么建议?
// Resolves
var checkAuthentication = function($q, $location, $rootScope, Users) {
if ($rootScope.user) return true;
if (!$rootScope.user) {
var deferred = $q.defer();
Users.get(null, function(user) {
if (!user) {
window.location = '/';
return false;
}
console.log('User fetched: ', user);
$rootScope.user = user;
deferred.resolve();
}, function() {
window.location = '/';
return false;
});
return deferred.promise;
}
};
// Routes
angular.module('Dashboard').config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
// For any unmatched url, redirect to '/'
$urlRouterProvider.otherwise('/dashboard');
// Now set up the states
$stateProvider
.state('dashboard', {
url: '/dashboard',
templateUrl: 'views/content/dashboard.html',
resolve: {
checkAuthentication: checkAuthentication
}
})
Run Code Online (Sandbox Code Playgroud)
use*_*654 23
通常这样做的方法是将数组传递给解析器:
resolve: {
welcome: ['$q', function ($q) {
var def = $q.defer();
setTimeout(function () {
def.resolve("Hello World!");
},500);
return def.promise;
}]
}
Run Code Online (Sandbox Code Playgroud)
考虑到这一点,您可以像这样定义您的var:
var welcome = ['$q', function ($q) {
var def = $q.defer();
setTimeout(function () {
def.resolve("Hello World!");
},500);
return def.promise;
}]
Run Code Online (Sandbox Code Playgroud)
但那当然不是真正可以重复使用的,所以在这一点上我建议将它移到服务中.