AngularJS变量未定义

AngularJS变量未定义,angularjs,variables,scope,undefined,Angularjs,Variables,Scope,Undefined,所以我的代码看起来像这样 .controller('weinDetailsCtrl', ['$scope', '$stateParams', '$http', '$rootScope',function ($scope, $stateParams, $http, $rootScope) { $scope.url = "https://winetastic.azurewebsites.net/tables/Wine/" + $rootScope.actWine + "?ZUMO-API-VERS

所以我的代码看起来像这样

.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,第二个警报为我提供了“未定义”。
怎么了?

您的
响应中似乎没有定义
Winetype\u ID
。请检查您的响应数据。我建议使用
console.log()以便脚本不会停止。

在从REST调用获取数据之前,将调用第二个警报。这是由于javaScript的异步特性造成的。所以您得到的值是未定义的。

让我澄清一下,您的第一个警报将是未定义的,第二个警报将是有值的

这是因为当它第一次调用时,您将没有
$scope.Winet
值。一旦您从服务器获得了值,那么它将具有一些值。这就是异步的全部内容

目前,您可以使用为
$scope.Winet
分配一些值。因此,第一次警报将是该值,而不是未定义的值。 试一试

现在,第一次警报将是异步调用完成之前的
警报

更多详细信息,请访问此链接


第一个警报将是
取消定义
,第二个警报将具有值是的,你是对的,但为什么?我想对winet做进一步的Sutf,但它总是说它是未定义的
$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