如何声明angularjs中整个函数可访问的变量?

时间:2015-04-21 02:50:20

标签: javascript angularjs

(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”的范围可用于整个功能?请任何人帮助我,我无法弄清楚..谢谢提前..!

4 个答案:

答案 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);
    }
);