AngularJS:控制器中未定义的工厂函数
AngularJS : factory function undefined in controller
我曾经以完全相同的方式让它工作,这让我发疯。我想对工厂执行 $http GET 调用,然后将结果返回到控制器中进行处理。
factory(不要注意请求的疯狂url):
App.factory('MessageFactory', function ($http) {
var MessageFactory = {
getCast: function () {
var request = {
method: "GET",
url: spHostUrl + "/_api/web/Lists/getByTitle('" + listTitle + "')/items?$select=AuthorId,Author/Name,Author/Title,Type_x0020_message,Title,Modified,Body,Expires,Attachments&$expand=Author/Id",
headers: {
"Content-Type": "application/json;odata=verbose",
"Accept": "application/json;odata=verbose"
}
};
$http(request)
.then(function (res) {
return res.data;
}).catch(function (res) {
console.error("error ", res.status, res.data);
}).finally(function () {
console.log("end");
});
}
};
return MessageFactory;
});
现在 控制器 :
App.controller('MessageController', function ($scope, $http, $log, $attrs, MessageFactory) {
$scope.messages = MessageFactory;
MessageFactory.getCast().then(function (asyncCastData) {
$scope.messages.cast = asyncCastData;
});
$scope.$watch('messages.cast', function (cast) {
//do stuff
});
});
当我测试它时,出现以下错误:
Error: MessageFactory.getCast(...) is undefined
@/Scripts/App.js:167:9
167行确实是controller中的这一行
MessageFactory.getCast().then(function (asyncCastData) {
我的应用程序在任何其他功能上都运行良好,所以我在添加这部分时出现了问题,我很确定我的控制器还不知道我的工厂,因此尝试访问他的功能。因为它是一个异步调用,所以它应该与控制器中的代码一起工作。我需要你的帮助,谢谢。
You must be getting .then of undefined error
因为您错过了 return 服务方法的承诺。
服务
var MessageFactory = {
getCast: function() {
var request = {
method: "GET",
url: spHostUrl + "/_api/web/Lists/getByTitle('" + listTitle + "')/items?$select=AuthorId,Author/Name,Author/Title,Type_x0020_message,Title,Modified,Body,Expires,Attachments&$expand=Author/Id",
headers: {
"Content-Type": "application/json;odata=verbose",
"Accept": "application/json;odata=verbose"
}
};
return $http(request) //returned promise from here
.then(function(res) {
return res.data;
}).catch(function(res) {
console.error("error ", res.status, res.data);
}).finally(function() {
console.log("end");
});
}
};
我曾经以完全相同的方式让它工作,这让我发疯。我想对工厂执行 $http GET 调用,然后将结果返回到控制器中进行处理。
factory(不要注意请求的疯狂url):
App.factory('MessageFactory', function ($http) {
var MessageFactory = {
getCast: function () {
var request = {
method: "GET",
url: spHostUrl + "/_api/web/Lists/getByTitle('" + listTitle + "')/items?$select=AuthorId,Author/Name,Author/Title,Type_x0020_message,Title,Modified,Body,Expires,Attachments&$expand=Author/Id",
headers: {
"Content-Type": "application/json;odata=verbose",
"Accept": "application/json;odata=verbose"
}
};
$http(request)
.then(function (res) {
return res.data;
}).catch(function (res) {
console.error("error ", res.status, res.data);
}).finally(function () {
console.log("end");
});
}
};
return MessageFactory;
});
现在 控制器 :
App.controller('MessageController', function ($scope, $http, $log, $attrs, MessageFactory) {
$scope.messages = MessageFactory;
MessageFactory.getCast().then(function (asyncCastData) {
$scope.messages.cast = asyncCastData;
});
$scope.$watch('messages.cast', function (cast) {
//do stuff
});
});
当我测试它时,出现以下错误:
Error: MessageFactory.getCast(...) is undefined @/Scripts/App.js:167:9
167行确实是controller中的这一行
MessageFactory.getCast().then(function (asyncCastData) {
我的应用程序在任何其他功能上都运行良好,所以我在添加这部分时出现了问题,我很确定我的控制器还不知道我的工厂,因此尝试访问他的功能。因为它是一个异步调用,所以它应该与控制器中的代码一起工作。我需要你的帮助,谢谢。
You must be getting .then of undefined error
因为您错过了 return 服务方法的承诺。
服务
var MessageFactory = {
getCast: function() {
var request = {
method: "GET",
url: spHostUrl + "/_api/web/Lists/getByTitle('" + listTitle + "')/items?$select=AuthorId,Author/Name,Author/Title,Type_x0020_message,Title,Modified,Body,Expires,Attachments&$expand=Author/Id",
headers: {
"Content-Type": "application/json;odata=verbose",
"Accept": "application/json;odata=verbose"
}
};
return $http(request) //returned promise from here
.then(function(res) {
return res.data;
}).catch(function(res) {
console.error("error ", res.status, res.data);
}).finally(function() {
console.log("end");
});
}
};