router ui“resolve”无法解析“返回deffered.promise”

时间:2018-04-08 15:05:20

标签: javascript angularjs angular-ui-router

我有这个角度的js代码:

app.js

        $stateProvider.state('home', {
            url: '/',
            component: 'homeComponent',
            params: {
                selectedFilter: undefined
            },
            resolve: {
                isAdOps: function (authorizationService) {
                    var ldapGroup = authorizationService.getLdapGroup();
                        //.then(
                    //     function(ldapGroup) {        return  ldapGroup === 'AdOps';},
                    //     function () { return true;}
                    // );

                    var isAdOps =  ldapGroup === 'AdOps';
                    console.log("isAdOps ?? "+isAdOps)
                    return isAdOps;
                }
            }
        })

和这个authorizationService:

    var getLdapGroup = function () {
        var deferred = $q.defer();
        if (self.isInit) {
            deferred.resolve(self.isAdOps);
            }
        else {
            $http.get('api/Voices/getLdapGroup').then(
            function successCallback(response) {
                    self.isAdOps = response.data === 'AdOps';
                deferred.resolve(response.data);

            }, function errorCallback(response) {
                    var error = !response.data ? "empty_error": response.data.errorMsg;
                    console.log(error);
                self.isAdOps = true;
                deferred.reject("data: "+response.data+" code:"+response.status+" "+response.statusText+", please look at the web console");
            });
        }
        return deferred.promise;
    };

和这个家庭组件:

(function (app) {
    app.component('homeComponent', {
        templateUrl: 'partials/home-partial.html',
        bindings: {
            isAdOps: '<'
        },
        controller: ['$scope', '$state', function ($scope, $state) {

            var self = this;

            console.log("self.isAdOps = " + self.isAdOps);
            self.isFullList = false;

即使response.data === 'AdOps'

主页组件绑定到isAdOps = false

我应该如何更改代码?

2 个答案:

答案 0 :(得分:1)

您必须将依赖项添加到控制器依赖项中的已解析。

 controller: ['$scope', '$state', 'isAdOps', function ($scope, $state, isAdOps) {
...
}

答案 1 :(得分:1)

这解决了我的问题:

resolve: {
                    isAdOps: function (authorizationService) {
                        return authorizationService.getLdapGroup();
                    }
                }