2016-09-23 8 views
-1

で実行していない、私は角度のカスタムサービスを呼び出す機能を持っており、機能は私の現在のプロジェクトではJS

var vm = this; 
vm.itemname = ''; 

function getItems(){ 
    var result = myservice.getFromLibrary(); 
    result.then(function(data){ 
    vm.dataSet = data; 
    }); 
} 

は、私がデータを保存するために別の機能を持つ変数にデータを代入しますそれが保存されます後

vm.addItem = function(){ 
    var newItem = {"title": vm.itemname}; 
    myservice.setToLibrary(newItem); 
    getItems(); 
}; 

を次のようにしてのgetItem()関数は、呼び出されるべきであるが、vm.addItemが呼ばれたとき、それはのgetItems機能でアイテムを取得しませんが、それは私に未定義の出力

を与えますは、あなたがしている関数の名前に欠けている -

すべてのヘルプは非常に関数名がgetItems()ですが、あなたはaddItemからそれを呼び出しているとき、あなたは未定義の機能getItem()を呼び出しているこの問題に

+0

アイテムを追加しても何も返されないため、未定義にする必要があります。 –

+0

あなたが投稿したコードでgetItems!== getitemの問題以外にも、myservice.getFromLibrary();は明らかに非同期なので、 'vm.dataSet'は" some time after " 'vmへの呼び出し。addItem' –

答えて

1

まず、関数名を間違って呼びます。getItemgetItemsである必要があります。

typoの場合は、サービスから約束が返された後にgetItemsメソッドを呼び出します。

コールバックからエラー関数を追加することもできます。

このpromise(then and error)を使用すると、次のコード行は応答がサービスから取得された場合にのみ実行されます。

vm.addItem = function(){ 
    var newItem = {"title": vm.itemname}; 
    myservice.setToLibrary(newItem) 
    .then(function(response){ 
     getItem(); 
    } 
    function error(response) 
    { 
    console.log('error') 
    }); 
}; 
+0

ハイ@ムジャヒッド、これを試してみましたか? – Sravan

+0

こんにちは@Sravan、返信いただきありがとうございます。はい、それは動作します。問題はサービスファイルにありましたが、以前はこの方法を試していたので、 'then'が定義されていないとのエラーが出ましたが、サービスファイルをチェックインしたときに約束を返さなかったので、今は完璧に動作します。お返事ありがとう – Mujahid

0

を修正するために理解されるであろう電話しようとしています。

+0

それを指摘してくれてありがとう、それは私がそれを書いたときにそのタイプミス、実際のコードではない – Mujahid

0

私は右のあなたがサービスコールmyservice.setToLibrary(newItem);を通って、再びサービスコールすなわち$http POST or GETあるgetItems();通じDB内の項目の存在を読んだことの後にアイテムを追加すると仮定しています。 「未定義の」出力

背後

理由あなたが追加しread.As $httpは本質的に非同期であるために、2つの$httpの呼び出しを行っている、あなたのvm.addItem()機能で見ることができるように、あなたのgetItems()であっても、あなたの前に実行されますmyservice.setToLibrary(newItem)が完全に実行されます。

これにより、未定義の出力が得られます。

ソリューションアプローチ

我々はsetToLibrary()呼び出しの成功の後、私たちgetItems()呼び出しを行ったとして、このアプローチは、あなたが結果を希望しまいます

vm.addItem = function(){ 
    var newItem = {"title": vm.itemname}; 
    myservice.setToLibrary(newItem).success(function(data){ 
     getItems(); 
    }); 

以下のようなあなたのvm.addItem()機能でいくつかの調整を行います。

+0

短い説明のおかげで、私は@ Sravanの答えを試してみました。 – Mujahid

+0

それは素晴らしいです!どういたしまして :) –

関連する問題