我有一个使用AngularJS构建的SharePoint应用程序。 我有一个控制器正在调用服务中的函数,它没有返回值。我是angularJS的新手,所以我有点失落。 我的服务:
App.factory('uploadAppService', function () {
return {
currentUserPic: function (myProfileProp) {
GetUserProfileInfo(myProfileProp).done(function (data) {
//The large thumbnail pic.
var picUrl = data.d.PictureUrl;
var largePicUrl = picUrl.replace('MThumb', 'LThumb');
console.log(largePicUrl) //the log here is correct. I want to return the largePicUrl back to my controller.
return largePicUrl;
});
}
我的控制器调用,我想使用服务中的网址填充.imageUrl
:
$scope.imageUrl = uploadAppService.currentUserPic("PictureUrl");
提前谢谢。
答案 0 :(得分:0)
对我而言,currentUserPic
函数似乎没有返回值。 GetUserProfileInfo
确实会返回你的largePicUrl,但这个值不会在任何地方使用(如果我能正确理解你的代码)。
你不应该使用return GetUserProfileInfo(myProfileProp).done(...);
吗?
编辑:但正如RaviH指出的那样,如果调用是异步的,你仍然需要在你的控制器中处理它。
答案 1 :(得分:0)
我没有看到您的GetUserProfileInfo
服务的实施,但我认为它是一个Deffered对象。
所以在代码之后
$scope.imageUrl = uploadAppService.currentUserPic("PictureUrl");
完成工作 - 你在变量$scope.imageUrl
中没有任何东西,因为你的工厂函数没有返回任何东西。
因此,首先您需要修改factory
:
App.factory('uploadAppService', function () {
return {
currentUserPic: function (myProfileProp) {
return GetUserProfileInfo(myProfileProp).done(function (data) {
// ^
// Here - @ababashka's edit
//The large thumbnail pic.
var picUrl = data.d.PictureUrl;
var largePicUrl = picUrl.replace('MThumb', 'LThumb');
console.log(largePicUrl) //the log here is correct. I want to return the largePicUrl back to my controller.
return largePicUrl;
});
}
返回Deffered Object,因此在完成工作后,您可以通过response
将其保存来保存图片网址。
您需要编写下一个代码后:
uploadAppService.currentUserPic("PictureUrl").done(
function (response) {
$scope.imageUrl = response;
}
);
将您的网址存储在$scope
的变量中。