VueJSアドレス参照コンポーネントがあります。アドレスの一部ではない(Twitterのハンドルのように)結果の中に返されたいくつかの余分なデータがありVueJSコンポーネントからのデータの共有
<p>{{ result.formatted_address }}</p>
:私のテンプレートインサイド
Vue.component('address-lookup',
{
template: '#address-lookup-template',
data: function()
{
return {
address: {'name': '', 'town:': '', 'postcode': ''},
errors: {'name': false, 'town': false, 'postcode': false},
states: {'busy': false, 'found': false},
result: {}
}
},
methods:
{
findAddress: function(event)
{
if(typeof event === 'object' && typeof event.target === 'object')
{
event.target.blur();
}
$.ajax(
{
context: this,
url: '/lookup',
data:
{
'name': this.address.name,
'town': this.address.town,
'postcode': this.address.postcode
},
success: function(data)
{
this.states.busy = false;
this.states.found = true;
this.address.name = data.name;
this.result = data;
}
});
},
reset: function()
{
this.states.found = false;
this.result = {};
}
}
});
私は、結果そうのような束縛しましたフォームの別の部分で発生します。私のフォームがどのように構成されているかという理由から、これらの入力を同じテンプレートに含めることはできません。
私はこれらの入力をバインドする方法を見つけましたが、いくらか「ハッピー」と感じました。
<input type="text" name="twitter" v-model="$refs.lookupResult._data.result.twitter">
すべて正常です。
私の問題は、新しいレコードを作成するコンテキストで、時には編集のコンテキストで、ときどき大きなテンプレートの一部としてフォームが含まれることです。レコードを編集するときに、検索コンポーネントが削除されます(サーバー側でif
を使用しているため、テンプレートはまったく読み込まれません)。このとき、このエラーが発生します。
$refs.lookupResult._data.result.twitter": TypeError: Cannot read property '_data' of undefined
これは意味があります。 lookupResult
は、私は、テンプレートが含まれている場合に定義され、編集するとき、私はこの行を削除しています:
<address-lookup v-ref:lookup-result></address-lookup>
私は再びサーバー側を使用して、v-model
属性のない余分な各入力のバージョンを含めることにより、その周りに働いてきましたif
。しかし、かなりの数があり、ちょっと面倒です。
これをよりうまく達成するために私が使用できるよりクリーンなアプローチがありますか?
私は実際に親コンポーネントを持っていません。親はアプリのルートにすぎません。しかし、おそらく私はルートデータを使用して同じ接続を行うことができますか?私はコンポーネントが常に同じVueJSコードを使用しているいくつかの他のページのうちの1つのフォームでしか使用されないので、それが常に定義されるのを避けるようにしていました。 –
はい、同じ概念が適用されます。私の 'parent-component'をあなたのアプリケーションのルートに置き換えてください。ルートは他のものと同じように有効な親です。 –