2017-06-15 4 views
0

私はAJAXリクエストを行うコンポーネントを持っています。コールバック関数では、親インスタンスまたはルートインスタンスに値を戻したい。Vue.js 2コンポーネントからルートインスタンスにデータを渡す

ように、コンポーネントの例のための私のコールバック関数は次のとおりです。

function callbackFunc(vm, response){ 
    vm.$emit('setValue', response.id); 
} 

と私のルートインスタンスに私はこのようなのsetValueと呼ばれる方法を使用して試してみた:

export default { 
    name: 'app', 
    data() { 
    return { 
     value : '' 
    } 
    }, 
    methods: { 
    setValue: function(value){ 
     console.log(value); 
    } 
    } 
} 

これにはありません作業。ドキュメントには、テンプレート内にイベントを入れる必要があると言われていますが、この場合はうまくいかないでしょう。

アイデア?

乾杯!

+0

もう少しコードを表示できますか?あなたのコールバックはどのように呼び出されているのですか? – Bert

+0

それは文字通り、グローバルスコープ内の関数です。 vmはvueインスタンスへの参照で、$ emitを呼び出すことができます。 – BarryWalsh

+0

グローバルスコープの場合は、 'const app = new Vue(...)'や 'callbackFunc'のようなものだけではなく、' app.setValue(response.id) 'を使用してください。 – Bert

答えて

1

私はvue-routerを使用しています。だから、アプリの 成分を持つルート要素がありますし、その後、親コンポーネントのテンプレートでは AJAX呼び出し

を持ってこんにちはと呼ばれるthere'stheコンポーネントを使用するには、VUE-ルータが置かれる場所である<router-view><\router-view>を持っていますあなたの子供。すべてを配線するには、テンプレートにディレクティブを追加する必要があります。

<router-view v-on:setValue="parentMethod" ><\router-view> 

子供がAJAX呼び出し後$emit("setValue")を呼び出し

が、それは親に parentMethod()をトリガします。あなたがなぜそれがテンプレートにそれを取り込むことができないと言うのかは明らかではありません。テンプレートがなければ、実際には親子関係はありません。

+0

乾杯!これを今試みている。私は取得しています:プロパティまたはメソッド "parentMethod"は、インスタンスでは定義されていませんが、レンダリング中に参照されています。データオプションで無効なデータプロパティを宣言してください。 – BarryWalsh

+0

申し訳ありませんが、私はそれを修正しました。素晴らしい、それは動作します!ありがとうございました!私は今何が起こっているのか分かりました。私はクリックイベントやぼかしなどのようにバインドする必要があると思っていました。再度、感謝します! – BarryWalsh

+0

申し訳ありません - それは明確ではありませんでした。私はあなたの親のジェネリックメソッドで 'parentMethod'を意味しました。親にこのメソッドを書き、parentMethodや 'setValue()'のようなものを呼び出す必要があります。テンプレートは、親コンポーネントにイベント 'setValue'をリッスンしてから親のメソッドを呼び出すように指示しています。 –

関連する問題