私は次のフィドルを持っています https://jsfiddle.net/91vLms06/1/
const CreateComponent = Vue.component('create', {
props: ['user', 'otherProp'],
template: '<div>User data: {{user}}; other prop: {{otherProp}}</div>'
});
const ListComponent = Vue.component('List', {
template: '<div>Listing</div>'
});
const app = new Vue({
el: '#app',
router: new VueRouter(),
created: function () {
const self = this;
// ajax request returning the user
const userData = {'name': 'username'}
self.$router.addRoutes([
{ path: '/create', name: 'create', component: CreateComponent, props: { user: userData }},
{ path: '/list', name: 'list', component: ListComponent },
{ path: '*', redirect: '/list'}
]);
self.$router.Push({name: 'create'}); // ok result: User data: { "name": "username" }; other prop:
self.$router.Push({name: 'list'}); // ok result: Listing
// first attempt
self.$router.Push({name: 'create', props: {otherProp: {"a":"b"}}}) // not ok result: User data: { "name": "username" }; other prop:
self.$router.Push({name: 'list'}); // ok result: Listing
// second attempt
self.$router.Push({name: 'create', params: {otherProp: {"a":"b"}}}) //not ok result: User data: { "name": "username" }; other prop:
}
});
最初にわかるように、ルートを初期化するときだけ、CreateComponent
user
に渡しています。
後で別のプロパティotherProp
を渡し、user
パラメータを保持する必要があります。これを行おうとすると、送信したオブジェクトがコンポーネントに渡されません。
otherProp
を渡し、user
を保持するにはどうすればよいですか?
otherProp
の本当の目的は、フォームからのデータをフォームに入力することです。リストパーツにはオブジェクトがあり、[編集]ボタンをクリックすると、リストから取得したデータをフォームに入力します。
propsの関数モード とparams
を使用して機能します
デモ: https://jsfiddle.net/jacobgoh101/mo57f0ny/1/
ルートを追加するときは、 propsの関数モード を使用して、デフォルトのプロパティuser
を設定し、route.params
をプロパティとして追加します。
{
path: '/create',
name: 'create',
component: CreateComponent,
props: (route) => ({
user: userData,
...route.params
})
}
pushで渡されたパラメータは、自動的に小道具に追加されます。
self.$router.Push({
name: 'create',
params: {
otherProp: {
"a": "b"
}
}
})