2015-05-24 52 views
0

有人可以解釋我爲什麼不能在我的console.log()

'use strict'; 

angular.module('angularDjangoRegistrationAuthApp') 
    .controller('TweatCtrl', function ($scope, $location, djangoAuth, djangoTweat, $routeParams) { 
    $scope.tweek = function(){ 
     console.log(' tweek '); 
    }; 

    djangoAuth.profile().then(function(data){ 
     $scope.user = data; 
     $scope.pk = data.pk; 
    }); 

    djangoTweat.getUserTweeks(1) 
     .then(function(data){ 
      $scope.tweeks = data 
     },function(data){ 
      // error case 
      $scope.errors = 'no tweeks'; 
     }); 
    console.log($scope); 
    console.log($scope.pk); 

最前一頁console.log()返回我有PK值的範圍對象得到$scope.pk值。 第二console.log()返回 '未定義' :(

回答

4

您正試圖在設置之前訪問$scope.$pk

以下代碼可能異步運行,因爲它使用的是承諾。它會在控制器初始化結束時的console.log語句後運行一段時間。它只會在djangoAuth.profile()承諾解決(成功)時運行。

djangoAuth.profile().then(function(data){ 
    $scope.user = data; 
    $scope.$pk = data.pk; 
    // now log $scope.$pk after it is set (assuming data.pk is not undefined) 
    console.log("$scope.$pk is", $scope.$pk, "and data.pk is", data.pk); 

}); 
+0

這是一個正確的假設,它通過承諾完成它的方式是正確的 它應該被包裝在$ timeout或_中。 deffer – IamStalker

+0

在承諾和異步函數中使用$ timeout不是很好的做法。雖然它可能有效,但取決於您設定的延遲時間,並不保證在您的承諾恢復後激活。關於'_.defer()',這意味着你將承諾包裝在承諾中,這有點多餘。 –

+0

@IamStalker,你指的是「它」?請更具體一些。 – lyjackal

-1

我看到的$ PK宣言,your're嘗試登錄$範圍的PK ATTR ..

CONSOLE.LOG($範圍。$ PK) ; //它應該沒問題..

另一件事,我建議你使用$ log,並將它包含在控制器的函數中,然後,你將能夠使用$ log.Error,$ log .Debug和$ log.log到標準控制檯。

+0

對不起,這是當我測試:(不,它不是一個missprint。 – billyJoe

+0

$ PK吧是一個自定義的供應商,它不似乎是正確的。 – IamStalker

+0

自定義提供使用前應申報。和它不是,唯一的「* pk *」是「設置」的東西是$ scope的一個attr,它的$ scope。$ pk。並且即使它會在inited之前被聲明爲它的日誌記錄 –

相關問題