簡體   English   中英

AngularJS變量未定義

[英]AngularJS Variable is Undefined

所以我的代碼看起來像這樣

.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,第二個警報給了我“未定義”。 怎么了?

在從REST調用獲取數據之前,將調用第二個警報。 這是由於javaScript的異步特性。 因此,您將獲得未定義的價值。

在您的response.data似乎未定義Winetype_ID ,請檢查您的響應數據。 我建議使用console.log(); 因此您的腳本不會停止。

讓我澄清一下,您的第一個警報將是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

您可以轉到此鏈接獲取更多詳細信息。

異步詳細信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM