[解決済み】Vue.jsコンポーネントのメソッドをコンポーネントの外から呼び出す
2022-03-29 21:51:06
質問
例えば、子コンポーネントを持つメインのVueインスタンスがあるとします。これらのコンポーネントのいずれかに属するメソッドをVueインスタンスの外側から完全に呼び出す方法はありますか?
以下はその例です。
var vm = new Vue({
el: '#app',
components: {
'my-component': {
template: '#my-template',
data: function() {
return {
count: 1,
};
},
methods: {
increaseCount: function() {
this.count++;
}
}
},
}
});
$('#external-button').click(function()
{
vm['my-component'].increaseCount(); // This doesn't work
});
<script src="http://vuejs.org/js/vue.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="app">
<my-component></my-component>
<br>
<button id="external-button">External Button</button>
</div>
<template id="my-template">
<div style="border: 1px solid; padding: 5px;">
<p>A counter: {{ count }}</p>
<button @click="increaseCount">Internal Button</button>
</div>
</template>
そこで、内部ボタンをクリックすると
increaseCount()
メソッドはそのクリックイベントにバインドされているので、それが呼び出されます。jQueryでリッスンしている外部ボタンのクリックイベントにバインドする方法はないので、何か他の方法で
increaseCount
.
EDIT
これでうまくいくようです。
vm.$children[0].increaseCount();
しかし、これは良い解決策ではありません。なぜなら、コンポーネントをchildren配列のインデックスで参照しており、多くのコンポーネントではこれが一定である可能性は低く、コードも読みにくくなるからです。
解決方法は?
最終的に、私は
Vueの
ref
ディレクティブ
. これにより、親からコンポーネントを参照し、直接アクセスすることができます。
例
親インスタンスにコンペネントを登録する。
var vm = new Vue({
el: '#app',
components: { 'my-component': myComponent }
});
template/htmlのコンポーネントを参照しながらレンダリングします。
<my-component ref="foo"></my-component>
さて、他の場所で、このコンポーネントに外部からアクセスすることができます。
<script>
vm.$refs.foo.doSomething(); //assuming my component has a doSomething() method
</script>
例として、このフィドルをご覧ください。 https://jsfiddle.net/xmqgnbu3/1/
(Vue 1を使用した古い例です。 https://jsfiddle.net/6v7y6msr/ )
関連
-
[解決済み】このエラーの原因は何ですか - "Fatal error: ローカルgruntを見つけることができません"
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] JavaScriptには、与えられた範囲内の範囲を生成する "range() "のようなメソッドがありますか?
-
[解決済み] 親メソッドから子メソッドを呼び出す
-
[解決済み] Reactコンポーネント外でのクリックを検出する
-
[解決済み】「GET」パラメータから値を取得する(JavaScript)【重複】。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
[解決済み】JavaScriptのinnerHTMLで要素が更新されない
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み] ローカルファイルを開くことができません - Chrome: ローカルリソースのロードが許可されていません
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み] [Solved] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングする