2016-09-12 8 views
2

私はvue-routerを使用しており、subRoutesに関する質問があります。ルートを設定してメインルートがリストになり、サブルートが編集/追加/ etcのようなものになるようにしたいと思います。vue-router親ビューをsubRouteに置き換えます。

親ルートの<router-view>を置き換えるsubRouteコンポーネントが必要です。ドキュメントと私がテストしたことを理解する方法では、subRouteをレンダリングするために親コンポーネントのテンプレートに別の<router-view>を定義する必要がありますが、ユーザーリストは表示されたままです。

例路線:

'/users': { 
    name: 'user-list', 
    component(resolve) { 
     require(['./components/users.vue'], resolve) 
    }, 
    subRoutes: { 
     '/add': { 
      name: 'add-user', 
      component(resolve) { 
       require(['./components/users_add.vue'], resolve) 
      } 
     } 
    } 
} 

メインルータビュー:

<!-- main router view --> 
<div id="app"> 
    <router-view></router-view> 
</div> 

ユーザーリスト:

<template> 
    <a v-link="{ name: 'add-user' }">Add</a> 
    <ul> 
     <li>{{ name }}</li> 
    </ul> 
</template> 

追加ユーザー:

<template> 
    <div> 
     <a v-link="{ name: 'user-list' }">back</a> 
     <input type="text" v-model="name"> 
    </div> 
</template> 

「追加」をクリックすると、追加ユーザテンプレートで満たされたいと思っています。これは可能ですか?

また、ユーザーリストとユーザー追加コンポーネントの間に親子関係を確立することはできますか?私は、ユーザーのリストを追加コンポーネントに渡し、イベントをユーザーリストに戻すことができるようにしたいと思います。

ありがとうございます!

+0

'/ user'に行くと、ユーザーリストがメインビューに表示されます。 '/ user/add'を実行すると自動的にilが同じ' 'にレンダリングされます。これがデフォルト動作です。 はい、小道具などを使用して親子通信を行うことができます。 – highFlyingDodo

+0

私のデフォルトの動作ではないようです。私がsubRoutesを定義してそれらにナビゲートすると、ルートルートはアクティブのままです。私がルートレベルのルートとしてsubRoutesを定義すると、それは動作します:/ – Chris

+0

ここhttp://router.vuejs.org/en/nested.html – highFlyingDodo

答えて

0

私はこれをかなり使いましたが、最終的にどのように達成できるかを考えました。このトリックは、リストをサブラインにすることです。ルートレベルのルートには、すべての子コンポーネントをレンダリングするためのコンテナとして<router-view>コンテナを用意するだけです。次に、 "list loading"を親コンポーネントに移動し、そのリストをリストコンポーネントに渡して小道具として渡します。その後、イベントを介してリストをリロードするように親に指示できます。

これは今のところ、魅力のように機能します。欠点は、私が本当に必要としなかった別のコンポーネントがあることだけです。私は時間を見つけたときの例をフォローアップします。

+0

これらの「ラッパー」コンポーネントは、これらのシナリオでは非常に一般的です。 Reactコミュニティでは、他のコンポーネントのデータを提供する「スマート」コンポーネント(外部データについて知っていて、それを操作するコンポーネント)と呼ばれます。 今は面倒かもしれませんが、便利です。 –

3

これらの編集/追加ルートはsubRoutesであってはいけません。そのように単純です。

パスがネストしているように見えるからといって、実際にネストする必要はありません。

'/users': { 
    name: 'user-list', 
    component(resolve) { 
     require(['./components/users.vue'], resolve) 
    } 
}, 
'users/add': { 
    name: 'add-user', 
    component(resolve) { 
     require(['./components/users_add.vue'], resolve) 
    } 
} 
+0

これが私が最初にしたことでした。問題は、親子関係が確立されていないため、小道具やイベントを通じてデータを渡すことができないということです。 – Chris

+0

親を子ルートに置き換えることができる場合、小道具でデータを渡す方法はありません。 一元化された店舗があると考えるべきです。 –

+0

これはおそらく本当です。私は集中ストレージを追加することを考えましたが、これは伝統的な "管理パネル"の種類のWebアプリケーションであり、実際にはこれらのリストはアプリ全体を通して表示されません。私が上に投稿した解決策はこれのために非常にうまくいく。あなたの考えをありがとう。 – Chris

関連する問題