2015-04-21 18 views
1
(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」的範圍可用於整個函數?請任何人幫助我我無法弄清楚..預先感謝..!如何在angularjs中聲明整個函數可訪問的變量?

+0

你錯過了後你'console.log' – qtgye

+1

你的意思'$ scope.contentOwnerId'這樣的收盤'}'吧? – batmaniac7

+0

是如何使整個init()方法可用的變量範圍 – Sharathreddy

回答

2

您聲明瞭兩次contentOwnerId;一旦進入if區塊,一次在其外面。外面的一個被宣佈,但從未分配一個值。它顯示爲null時應該爲null。

+0

如果我不decalre再次將它保留存儲的值 – Sharathreddy

+0

我已經作出你說的cahnges,但它仍然不工作 – Sharathreddy

+0

我只能看到一個聲明'contentOwnerId ',然後,在解決的承諾中,'savedContentOwnerId'被分配給它。 – datamosh

1

你爲什麼得到contentOwnerId未定義的原因是它是undefined,直到getcontentOwnerId()許諾成功!

,如果你在年初做

var contentOwnerId = "before resolving the promise"; 

init()你可能有一個字符串登錄到控制檯,而不是undefined

0

使用$scope.contentOwnerId,而不是var contentOwnerId

參見$scope.contentOwnerId可用於整個控制器,即ListSharedContentCtrl

正常JavaScript變量被限制爲其中的功能作爲$scope是提供給整個控制器

+0

我曾嘗試使用$ scope,但它不工作... – Sharathreddy

0

的。然後()方法屬於一個承諾。 這意味着它不會立即執行,而是在角度生命週期的後期執行。

您的console.log()將始終記錄'undefined',因爲您的變量不會在那裏初始化。 你可以試試這個記錄的值:

$scope.$watch( 
    function() { return contentOwnerId; }, 
    function(newContentOwnerId, oldContentOwnerId) { 
     console.log(newContentOwnerId); 
    } 
); 
+0

在哪裏實現此代碼..我明白,該值可能不會被初始化,因爲我解決它的promise.Is有任何方法來綁定值在承諾解決後立即向contentOwnerId發送。? – Sharathreddy

相關問題