Angular:在提供程序中使用$ http

时间:2014-05-14 14:25:50

标签: angularjs

我创建了一个角度提供程序,它暴露了getSession方法,在进入特定路径之前我需要解决这个问题:

var serviceId = 'session';

angular.module("app").provider(serviceId, sessionProvider);

function sessionProvider() {

    this.session = undefined;

    this.$get = function($http) {
        return {
            getSession: function () {
                return $http.get("/session-info")
                        .then(_onSuccess, _onError);
            }
        }
    }

    function _onSuccess(data) {
        return data.data;
    }

    function _onError(data) {
        return data;
    }
}

然后我将它注入我的配置并尝试使用它:

angular.module("app").config([
            "$routeProvider", "$httpProvider", "sessionProvider", function 
                ($routeProvider, $httpProvider, sessionProvider) {
                $routeProvider.when("/", {
                    templateUrl: "app/home/home.html",
                    resolve: {
                        session: sessionProvider.getSession()
                    }
                });
            }
    ]);

但是我收到以下错误:

Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to:
    TypeError: undefined is not a function

我不确定我在这里做错了什么?

修改

当我尝试下面的@DrogoNevets答案时:

function sessionProvider() {

    this.session = undefined;

    this.$get = function ($http) {
        return {
        }
    }

    this.getSession = function () {
        return $http.get("/session-info")
                    .then(_onSuccess, _onError);
    }

    function _onSuccess(data) {
        this.session = data.data;
        return data.data;
    }

    function _onError(data) {
        return data;
    }
}

我收到以下错误,因为我无法将$http注入提供程序本身,这是正确的吗?

Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to:
    ReferenceError: $http is not defined

1 个答案:

答案 0 :(得分:1)

如果您想从配置部分调用getSession,则需要将其分配给this而不是$get部分

尝试这样的事情:

function sessionProvider() {
    var session;

    this.$get = function() {
        return {
            getSession: this.getSession,
            setSession: this.setSession
        }
    }

    function _onSuccess(data) {
        return data.data;
    }

    function _onError(data) {
        return data;
    }


    this.getSession= function () {
        return session
    }

    this.setSession= function (id) {
        session = id;
    }
}

这是一个显示我的意思的小提琴:http://jsfiddle.net/EQ86N/1/