2016-04-10 21 views
0

Dies sind die Daten meines Controllers. kupon.offer ist ng-model zu api. Die Antwort hat ein Array bekommen. $ rootScope.Result ist ein Array von Daten, aber $ rootScope.Result.offerpice = undefined. wie die diese Daten bekommen

mainCtrl.controller("OrderController",function($scope,$rootScope){ 
couponres=$resource("http://demo.foodzard.in/api/promocode? code="+$rootScope.coupon.offer) 
    if($scope.Total()>=400) 
    { 
     $rootScope.Result=couponres.get(function(data){ 
     console.log(data); 
     return data; 
    }); 
    console.log($rootScope.Result); 
    console.log($rootScope.Result.offerprice) 

Antwort:

Resource {offerid: "6", offerprice: "30", $promise: Promise, $resolved: true} 
offerprice: 
undefined 

i dieses

var couponres=$resource("http://demo.foodzard.in/api/promocode?code="+$rootScope.coupon.offer) 
    if($scope.Total()>=400) 

    { 
$rootScope.Result=couponres.get().$promise.then(function(data){ 
     console.log(data); 

     return data; 

    });} 

verwenden, aber nicht Arbeit geben Sie bitte Lösung für dieses

+0

'$ resource' ist AJAX, die definitionsgemäß asynchron ist. Sie können nicht auf die Daten zugreifen, bevor die Anforderung abgeschlossen wurde. – charlietfl

Antwort

0

Sie versuchen zu protokollieren Sie die Antwort der AJAX-Anfrage, nachdem Sie die Anfrage gesendet haben. Das kann nicht funktionieren. Das erste A in AJAX bedeutet asynchron.

So die Antwort ist zu diesem Zeitpunkt noch nicht verfügbar. Verschieben Sie Ihre zwei Protokollanweisungen in die Callback-Funktion, in der Sie bereits protokollieren data.

-1

Angular $ Ressource-Service gibt ein Versprechen zurück, so dass Sie nicht Daten haben können, sobald Sie Anfrage senden!

während Sie eine asynchrone Funktion und richtige danach verwenden, Sie protokollieren $rootScope.Result die noch nicht und es nicht definiert für die Rückkehr behoben ist!

können Sie die Daten nach dem Versprechen behoben:

couponres.get().$promise.then(function(response) { 

    $rootScope.Result = response.data; 
    console.log($rootScope.Result); 
    console.log($rootScope.Result.offerprice); 
}); 

Update:

jetzt! Sie können es in Ihrer Sicht verwenden.

zum Beispiel:

<h1> 
{{Result.offerprice}} 
</h1> 
+1

Nicht wirklich zutreffend. '$ resource' selbst gibt ein Array oder Objekt zurück, das leer ist, bis die Anfrage abgeschlossen ist. Sie können ein Versprechen verwenden, aber nicht das, was Sie gezeigt haben – charlietfl

+0

Ja. Du hast recht. bearbeitet die Antwort. lass es mich wissen, wenn es wahr ist. Danke –

+0

Erklärt immer noch nicht, warum die Verwendung des Rückrufs nicht für OP funktioniert. Die 'console.log()' ist identisch mit beiden Methoden – charlietfl