变量从Angular Service返回null?

时间:2015-03-09 14:07:29

标签: javascript angularjs

我有一个使用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");

提前谢谢。

2 个答案:

答案 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的变量中。