Jestem trochę zdezorientowany, jak korzystać z tego jako komponentu w mojej aplikacji. W szczególności, jestem zdezorientowany, jak prawidłowo przekazać dane z mojego składnika rodzicielskiego do <quasar-editor /> z HTTPS: //Github.com/donoteBase/quasar-tiptap.

Mój kod poniżej przekazuje dane z episode.keyLessons w moim składniku rodzicielskim do edytora. Jednak gdy próbuję wpisać edytor, klawisz Spacji nie rejestruje. Jeśli kursor znajduje się w sekcji <h1> na górze i naciśnięciu dowolnego klawisza, kursor natychmiast przeskakuje do sekcji <p> edytora bez klikania tam.

Co ja robię źle?

Co próbowałem:

editor.vue

<template>
  <div>
    <quasar-tiptap v-bind="options" @update="onUpdate" />
  </div>
</template>

<script>
import { QuasarTiptap, RecommendedExtensions } from "quasar-tiptap";
import "quasar-tiptap/lib/index.css";

export default {
  name: "Editor",
  props: ['value'],
  data() {
    return {
      options: {
        content: '',
        editable: true,
        extensions: [
          ...RecommendedExtensions
          // other extenstions
          // name string, or custom extension
        ],
        toolbar: [
          "add-more",
          "separator",
          "bold",
          // other toolbar buttons
          // name string
        ]
      },
      json: "",
      html: ""
    };
  },
  components: {
    QuasarTiptap
  },
  methods: {
    onUpdate({ getJSON, getHTML }) {
      this.json = getJSON();
      this.html = getHTML();
      this.$emit('update', this.html)
    }
  },
  watch: {
    value: {
      handler(newVal, oldVal) {
        this.options.content = newVal;
        console.log(`value changed: ${newVal}`);
      },
      immediate: true
    }
  },
  mounted() {
    // set language dynamically
    this.$o.lang.set("en-us");
  }
};
</script>

Parent.vue

<template> 
   <Editor v-model="episode.keyLessons" @update="update" />
</template>

<script>
data: () => ({
   episode: {
      keyLessons: null,
   }
}),
methods: {
   update(value) {
         this.episode.keyLessons = value;
       },
}
</script>
1
Joe Berg 21 październik 2020, 21:09

1 odpowiedź

Najlepsza odpowiedź

Po wpisaniu czegoś, zresetuj również treść i prawdopodobnie jest przyczyną dziwnego zachowania. Najlepiej jest pozwolić, aby Tiptap obsłużyć aktualizacje i ustawić tylko zawartość TIPTAP, jeśli zawartość (wartość) zmienia się z zewnątrz (składnik rodzicielski). W większości przypadków początkowo chcesz ustawić treść.

Oto jak polecam to zrobić:

export default {
  name: "Editor",
  props: ['value'],
  data() {
    return {
      valueChangedFromEditor: false,
      options: {
        content: '',
        editable: true,
        extensions: [
          ...RecommendedExtensions
          // other extenstions
          // name string, or custom extension
        ],
        toolbar: [
          "add-more",
          "separator",
          "bold",
          // other toolbar buttons
          // name string
        ]
      },
      json: "",
      html: ""
    };
  },
  components: {
    QuasarTiptap
  },
  methods: {
    onUpdate({ getJSON, getHTML }) {
      this.valueChangedFromEditor = true;
      this.json = getJSON();
      this.html = getHTML();
      this.$emit('update', this.html)
    }
  },
  watch: {
    value: {
      handler(newVal, oldVal) {
        // Only update if the value changed from parent component.
        if (!this.valueChangedFromEditor) {
          this.options.content = newVal;
          console.log(`value changed: ${newVal}`);
        }
        this.valueChangedFromEditor = false;
      },
      immediate: true
    }
  },
  mounted() {
    // set language dynamically
    this.$o.lang.set("en-us");
  }
};
2
Dharman 21 październik 2020, 19:14