2017-03-22 3 views
0

Mein Code des Controllers ist: -Wie Wert verwenden außerhalb http.then in Angular

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); 
}); 

ich einen Wert wie 44144 in $scope.ord1 erhalten. und ich muss es in meinem Controller außerhalb s1t1 Funktion verwenden. Ich repräsentiere es mit einer Warnung. Ich versuche es auch mit $rootScope, aber das Ergebnis ist das gleiche.

+1

'$ http' ist aync – Satpal

+0

Ihre Warnung selbst ausgeführt wird, wenn Ihr http noch nicht ist, beenden und Ihre Funktion s1t1 ist nicht einmal genannt. – imprezzeb

+0

Ja Es liefert einen Wert vor der s1t1-Funktion. und ich möchte wissen, wie ich ord1 nach der Ausführung der s1t1-Funktion bekomme? –

Antwort

0

alert Innerhalb der then-Funktion dauert es eine kleine Zeit, aber Sie erhalten einen Wert. Rufen Sie eine Funktion auf, in der Sie den Wert verwenden möchten.

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

Danke Shubhranshu ..aber es geht nicht um Alarm. In diesem Ort gibt der Alarm Wert. aber ich brauche den Wert von $ scope.ord1 außerhalb der Funktion s1t1 (außerhalb der Funktion). –

+0

Ich weiß, du versuchst das Ding zu bekommen, das jetzt nicht existiert, aber nach einiger Zeit existieren wird. So stellen Sie sicher, dass Sie den Wert anwenden, wenn es nicht vorher existiert. Und wenn Sie die vollständige Hilfe wollen, dann lassen Sie mich bitte Ihre volle Anforderung wissen – Shubhranshu

+0

Es hat 4 Stufen wie s1t1 und nach jeder Stufe gibt es einen Wert ord1, ord2 zurück und ord3 dann brauche ich die Summe von ord. ord = ord1 + ord 2 + ord3 –

1

Die Dinge werden nicht sequenziell (synchron) in Ihrem Code ausgeführt. $http ist asynchron, was bedeutet, dass der function aufgerufen wird, eine Anfrage gesendet wird, aber Ihr Code wird nicht auf eine Antwort warten und direkt nach dem function Anruf haben Sie keinen Wert noch. Sie müssen Ihren Code, der von der Antwort innerhalb des Rückrufs abhängt, in die then setzen.

+0

Eigentlich habe ich 4 dann Funktion. und sie liefern Ergebnis ord1, ord2, ord3 und ord4 und ihr Ergebnis wird hinzugefügt. Ich kann also nicht drinnen. Gibt es irgendeine Methode, die es sequentiell ausführt? –

+0

@ R.Kumar in diesem Fall können Sie Ihren zweiten Anruf innerhalb des Rückrufs des ersten setzen. Setzen Sie den dritten Aufruf in den Rückruf des zweiten und den vierten Rückruf in den Rückruf des dritten. Die Hauptsache ist, dass Sie nicht erwarten müssen, dass Ihr Code bei asynchronen Aufrufen sequenziell ausgeführt wird, und dass Sie die Reihenfolge behandeln, indem Sie den richtigen Code in den richtigen Rückruf einfügen. –

0

Verwenden Timeout-Funktion

 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); 
      } 
     }); 
Verwandte Themen