2017-11-12 2 views
0

私はvuejs-router使用する前に、私はコンポーネントのアプリでこのようにロードしました:Vuejsルータを経由してコンポーネントに渡す@EventListener

<my-component @done="doneForm" 
       @cancel="cancelForm"></my-component> 

まあ、私はmy-componentをロードするためにvuejs-routerを使用したいです。だから、@done@cancelmy-componentvuejs-router経由で渡すにはどうすればよいですか?

+0

Vueルータはルーティングエンジンであり、コンポーネントをロードするためのものではありません。コンポーネントへのルートをロードし、コールバックの方法でそのコンポーネントをロードする必要があります。 – webnoob

+0

Tnxの返信では、(vuejsアプリではなく)1つのコンポーネントでvuejs-routerを使用し、ルートでそのコンポーネントに 'my-component'をロードすることを意味しますか? – YaserKH

答えて

0

my-componentがインスタンス化されるルートを定義する必要があります。このコンポーネントは、そう、donecancelコールバックが含まれます:あなたは任意のコードを示していませんでしたし、どのようにあなたがあなたの<my-component>が、呼んでいるとして

<template> 
    <my-component @done="doneForm" @cancel="cancelForm"></my-component> 
</template> 
<script> 
    import MyComponent from '/some/path/components/MyComponent' 

    export default { 
     components: { 
      myComponent: MyComponent 
     }, 
     methods: { 
      doneForm() { 
       console.log('Form Done') 
      }, 
      cancelForm() { 
       console.log('Cancel Form') 
      } 
     } 
    } 
</script> 

var router = new VueRouter({ 
    routes: [ 
    { path: '/someRoute', component: SomeComponent } 
    ] 
] 

SomeComponentは次のようなものになるだろう全体として、は、cancelFormdoneFormのメソッドを保持できる別のコンポーネントのどこかでインスタンス化する必要があります。これらのコールバックが必要ない場合は、ルートを設定してそのコンポーネントに直接進むことができます。

もう一つの選択肢は、Vuexを使ってステートフルなものにすることです。コンポーネントからコールバックを削除し、<my-component>内でフォームが完了したときに、アプリ内の他の場所に反応できる状態に設定します。イベントでも同じことをして、何かを聞いて何かするイベントを起こすことができます。

+0

私は最初の方法が好きです:) – YaserKH

関連する問題