2017-02-15 89 views
0

所以我的代碼看起來像這樣AngularJS變量未定義

.controller('weinDetailsCtrl', ['$scope', '$stateParams', '$http', '$rootScope',function ($scope, $stateParams, $http, $rootScope) { 

$scope.url = "https://winetastic.azurewebsites.net/tables/Wine/" + $rootScope.actWine + "?ZUMO-API-VERSION=2.0.0"; 
$scope.Winet; 

$http({ 
    method: "GET", 
    url: $scope.url 
}).then(function mySucces(response) { 

    $scope.wineDetails = response.data; 
    $scope.Winet = $scope.wineDetails.Winetype_ID; 
    alert($scope.Winet); 


}, function myError(response) { 
    $scope.wineDetails = response.statusText 
}); 

alert($scope.Winet);}]) 

第一個警報給了我正確的WineType_ID,第二警報給我一個「未定義」。 有什麼問題?

+0

第一警報將是'undefine'和第二將是具有價值 –

+0

是的,你是對的,但爲什麼呢?我想用winet做進一步的sutff,但它總是說它沒有定義 –

+0

檢查我的答案。 –

回答

0

讓我清楚你的第一個警報將undefined和第二將是具有價值。

這是因爲你不會有$scope.Winet值時,它會調用首次。一旦你從服務器獲得價值,那麼它將具有一定的價值。這是什麼異步是全部。

對於目前你可以使用一些值賦給$scope.Winet。所以第一次警報將是該值而不是未定義的。 嘗試

$scope.url = "https://winetastic.azurewebsites.net/tables/Wine/" + $rootScope.actWine + "?ZUMO-API-VERSION=2.0.0"; 
$scope.Winet = 'alert before Asynchronous call completion';//you can change it as your need 

現在第一次警報將是alert before Asynchronous call completion

更多detials你可以去這個鏈接。

Asynchronous Details

0

看來,Winetype_ID在您response.data不確定,請檢查您的響應數據。我建議使用console.log();,這樣你的腳本就不會停下來。

1

你的第二個警報從REST調用獲取數據之前調用。這是由於javaScript的異步性質。所以你沒有定義的價值。