2016-04-10 24 views
0

これはマイコントローラのデータです。 coupon.offerはng-model to apiです。応答は配列を得ました。 $ rootScope.Resultはデータの配列ですが、$ rootScope.Result.offerprice = undefinedです。どのようにこのデータを取得する

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) 

応答:私はこの

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; 

    });} 

しかし、あなたがしようとしている。この

+0

'$のresource'は、定義により、非同期であるAJAXです。リクエストが完了する前にデータにアクセスすることはできません – charlietfl

答えて

0

のためのソリューションを提供してください を働いていない使用

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

リクエストを送信した直後のAJAXリクエストのレスポンスを記録します。それはうまくいかない。 AJAXの最初のAは非同期を意味します。

したがって、その時点ではまだ応答はありません。 2つのログステートメントを既にdataを記録しているコールバック関数内に移動します。

-1

角度$のリソースサービスは約束を返しますので、あなたがリクエストを送信するとすぐに にデータがありません!

あなたはその後、非同期機能と右 を使用している間、あなたは はundefinedを返しますため、まだ、そこに解決されていない$rootScope.Resultをログに記録されています!

あなたは約束が解決された後のデータを持つことができます。

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

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

アップデート:今

!あなたの視点でそれを使うことができます。例えば

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

本当にそうではありません。 '$ resource'自体は、要求が完了するまで空の配列またはオブジェクトを返します。あなたは約束を使用することができますが、あなたが示した方法ではありません – charlietfl

+0

はい。あなたが正しいです。答えを編集しました。もしそれが本当なら私に知らせてください。ありがとう –

+0

コールバックがOPのために働いていない理由をまだ説明しません。 'console.log()'は、両方の方法を使用して同じです – charlietfl

関連する問題