我创建了一个角度提供程序,它暴露了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
答案 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/