私は、コンポーネント内からテキストエリアの値の変化を検出する方法を理解しようとしています。VueJs:Textarea input binding
入力のために我々は単に
<input
:value="value"
@input="update($event.target.value)"
>
しかしテキストエリアに、これは動作しません使用することができます。
私が扱っているのは、(この子コンポーネントに接続されている)親コンポーネントのモデル値が更新されたときにwysiwygのコンテンツを更新するCKEditorコンポーネントです。
私Editor
コンポーネントは、現在、次のようになります。
<template>
<div class="editor" :class="groupCss">
<textarea :id="id" v-model="input"></textarea>
</div>
</template>
<script>
export default {
props: {
value: {
type: String,
default: ''
},
id: {
type: String,
required: false,
default: 'editor'
}
},
data() {
return {
input: this.$slots.default ? this.$slots.default[0].text : '',
config: {
...
}
}
},
watch: {
input(value) {
this.update(value);
}
},
methods: {
update(value) {
CKEDITOR.instances[this.id].setData(value);
},
fire(value) {
this.$emit('input', value);
}
},
mounted() {
CKEDITOR.replace(this.id, this.config);
CKEDITOR.instances[this.id].setData(this.input);
this.fire(this.input);
CKEDITOR.instances[this.id].on('change',() => {
this.fire(CKEDITOR.instances[this.id].getData());
});
},
destroyed() {
if (CKEDITOR.instances[this.id]) {
CKEDITOR.instances[this.id].destroy()
}
}
}
</script>
と私は親コンポーネント
<html-editor
v-model="fields.body"
id="body"
></html-editor>
以内にそれを含めるただし、いつでも親コンポーネントのモデル値の変更 - それはウォッチャーをトリガしません - 効果的にエディタのウィンドウを更新しません。
親コンポーネントのモデルfields.body
が更新された場合にのみ、update()
メソッドを呼び出す必要があります。
私はそれにどのようにアプローチできますか?
ありがとう@craig_h - 私は試してみる –
うーん、コンテンツが更新されているときにwysiwygも 'input'を出す必要があるので、うまくいかないと思う - 現時点では 'editor 'にタイプするときに' wysiwyg'しか更新されませんでした。私はそれが私の後ではないと恐れています。とにかくありがとう。 –
ああ、その場合、私は[vuex](https://vuex.vuejs)を見ることをお勧めします。org)を使用して、共有状態を抽出して、コンポーネント間で状態を放出および同期しようとするのではなく、取り除くことができます。 –