(function (angular) {
'use strict';
angular
.module('app')
.controller('ListSharedContentCtrl', ['$scope','$log','UserService', 'ContractService','ContentOwnerService','PlatformPartnerService',function ($scope, $log, userService, contractService,contentOwnerService,platformPartnerService) {
$scope.init = function () {
var contractIds =[];
var contentOwnerId;
var platformPartnerId;
var user=userService.getCurrentUser('true');
var contentOwner=userService.isCurrentUserIsContentOwner();
var platformPartner=userService.isCurrentUserIsPlatformPartner();
if(contentOwner == "true")
{
contentOwnerService.getContentOwnerId().then(function(savedContentOwnerId) {
contentOwnerId=savedContentOwnerId;
console.log(contentOwnerId);//here I can log the value
},function(error) {
$log.error("Error fetching contract id:" + error.message);
});
}
console.log(contentOwnerId); //but Here I cant log the value..Its showing undefined
} $scope.init();
}]);
})(angular);
现在我的问题是如何使变量“contentOwnerId”的范围可用于整个功能?请任何人帮助我,我无法弄清楚..谢谢提前..!
答案 0 :(得分:2)
您要声明contentOwnerId两次;一旦进入if块,一旦进入它之外。声明了一个外部,但从未赋予值。它应该为null,显示为null。
答案 1 :(得分:1)
您获得contentOwnerId
未定义的原因是,undefined
承诺成功之前它是getcontentOwnerId()
!
如果你这样做
var contentOwnerId = "before resolving the promise";
在init()
开头,您可能会将该字符串记录到控制台,而不是undefined
答案 2 :(得分:0)
使用$scope.contentOwnerId
代替var contentOwnerId
。
$scope.contentOwnerId
可供整个控制器使用,即ListSharedContentCtrl
。
普通的javascript变量仅限于$scope
可用于整个CONTROLLER
答案 3 :(得分:0)
.then()方法属于promise。 这意味着它不会立即执行,但会在角度生命周期中稍后执行。
您的console.log()将始终记录未定义的'因为你的变量不会在那里被初始化。 您可以尝试此操作来记录值:
$scope.$watch(
function() { return contentOwnerId; },
function(newContentOwnerId, oldContentOwnerId) {
console.log(newContentOwnerId);
}
);