【问题标题】:Angular UI-Router Minification Error - How Can I Change Resolve Syntax To Be String Injection Based?Angular UI-Router 缩小错误 - 如何将解析语法更改为基于字符串注入?
【发布时间】:2014-07-08 15:44:30
【问题描述】:

我正在使用带有解析函数的 Angular UI-Router,但是当我缩小解析函数时,我的整个应用程序都会中断,因为解析函数语法不适合缩小。它需要基于here 概述的字符串注入。我只是不知道怎么写。有什么建议吗?

// 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
                }
            })

【问题讨论】:

  • 您是否缺少 .module("Dashboard") 函数的其余部分 - 否则它缺少右括号和什么 npt
  • 你不会像使用 .config 一样传递它吗?作为一个数组?
  • tymeJV - 我只是将 .config 函数放入以供参考,所以这不是问题。问题仅在于 checkAuthentication 函数的语法。
  • Kevin,是的,配置语法是正确的,但我对 angular 还是很陌生,我认为我不会将 checkAuthentication 函数放在 angular '.config' 语句中。
  • 您不必这样做。 var myfn = ['$q', function ($q) {...如果你想重用它,它可能应该是一个服务。

标签: javascript angularjs angular-ui-router


【解决方案1】:

您通常执行此操作的方式是将数组传递给解析:

resolve: {
    welcome: ['$q', function ($q) {
        var def = $q.defer();
        setTimeout(function () {
            def.resolve("Hello World!");
        },500);
        return def.promise;
    }]
}

考虑到这一点,您可以像这样定义您的 var:

var welcome = ['$q', function ($q) {
    var def = $q.defer();
    setTimeout(function () {
        def.resolve("Hello World!");
    },500);
    return def.promise;
}]

但这当然不是真正可重用的,因此我建议将其移至服务中。

【讨论】:

  • "(...) 这当然不是真正可重用的,因此我建议将其移至服务中。" - 我的想法完全正确。
  • 为我工作。谢谢你:)
猜你喜欢
  • 2015-08-28
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
相关资源
最近更新 更多