2017-03-22 33 views
0

我的控制器代碼中使用外http.then值: -如何在角

var app = angular.module('myApp'); 
app.controller('myCtrl', function() { 
    $scope.year = "1350"; 
    $scope.ord1 = ""; 
    $scope.s1t1 = function() { 
     $http({ 
      url: 's1t1.json', 
      method: 'GET' 
     }).then(function(response) { 
      $scope.set = response.data; 
      //console.log($scope.set); 
      $scope.obj = $scope.set.find(o => o.year === $scope.year); 
      $scope.ord1 = $scope.obj.ordinal; 
     }); 
    } 
    alert($scope.ord1); 
}); 

我得到像在$scope.ord1 44144的值。我需要在我的控制器外部使用s1t1功能。我用一個警報代表它。我也嘗試用$rootScope但結果是一樣的。

+1

'$ http'是aync即使你的HTTP是尚未完成執行 – Satpal

+0

提醒和你的函數s1t1甚至沒有叫。 – imprezzeb

+0

是它在s1t1函數執行前提供值。我想知道如何在執行s1t1函數後獲得ord1的值? –

回答

0

alert當時的函數中,這將需要時間少量的,但你會得到一個值。在你想使用該值的地方調用一個函數。

var app = angular.module('myApp'); 
app.controller('myCtrl', function() { 
$scope.year = "1350"; 
$scope.ord1 = ""; 
$scope.s1t1 = function() { 
    $http({ 
     url: 's1t1.json', 
     method: 'GET' 
    }).then(function(response) { 
     $scope.set = response.data; 
     //console.log($scope.set); 
     $scope.obj = $scope.set.find(o => o.year === $scope.year); 
     $scope.ord1 = $scope.obj.ordinal; 
     alert($scope.ord1); 

     // Call a function where you want to use the value 
     myFunctionTousevalue(); 
    }); 
} 
    var myFunctionTousevalue = function() { 
    alert('Using Value: '+$scope.ord1); 
    } 
}); 
+0

謝謝Shubhranshu ..但它不是關於警報。在那個地方警報給予價值。但我需要$ scope.ord1的外部s1t1函數(在函數之外)的值。 –

+0

我知道,你正在試圖讓這不現在存在的東西,但是過一段時間會存在。因此,只要確保在不存在之前應用該值。如果您需要完整的幫助,請讓我知道您的全部要求 – Shubhranshu

+0

它有4個階段,如s1t1,每個階段後它返回一個值ord1,ord2和ord3然後我需要ord的總和。 ord = ord1 + ord 2 + ord3 –

1

在您的代碼中不會順序執行(同步)。 $http是異步的,這意味着function被調用時,請求被髮送,但您的代碼將不會等待響應,只是在function調用後,你沒有價值。您需要將您的代碼取決於then回調中的響應。

+0

其實我有4則功能。並提供結果ord1,ord2,ord3和ord4,並添加結果。所以我不能把它放在裏面。那麼是否有任何方法順序執行? –

+0

@ R.Kumar在這種情況下,你可以把你的第二個電話的第一回調內部。將第三個調用放在第二個回調中,並將第四個回調放在第三個回調中。最主要的是你不需要期望你的代碼在異步調用上按順序運行,並通過將正確的代碼放入正確的回調來處理序列。 –

0

使用超時功能

 var app = angular.module('myApp'); 
     app.controller('myCtrl', function($timeout) { 
     $scope.year = "1350"; 
     $scope.ord1 = ""; 
     $scope.s1t1 = function() { 
      $http({ 
       url: 's1t1.json', 
       method: 'GET' 
      }).then(function(response) { 
       $scope.set = response.data; 
       //console.log($scope.set); 
       $scope.obj = $scope.set.find(o => o.year === $scope.year); 
       $scope.ord1 = $scope.obj.ordinal; 

       // Call a function in timeout 
       $timeout(funuction(){ 
        myFunctionTousevalue();   
      },100) 

      }); 
     } 
      var myFunctionTousevalue = function() { 
      alert('Using Value: '+$scope.ord1); 
      } 
     });