suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Wie lege ich nicht reagierende Daten für Komponenteninstanzen in Vue 3 fest?

<p>Bei Vue2 gibt es ein ähnliches Problem. Es wird empfohlen, <code>$options</code> zu verwenden. </p> <p>Aber es scheint für Vue 3 nicht zu funktionieren. </p> <p>Zunächst einmal heißt es in der Vue 3-Dokumentation, dass <code>$options</code> schreibgeschützt ist. </p> <p>Wenn ich also versuche, den Tooltip in der Instanz zu initialisieren, wenn die Komponente gemountet wird, erhalte ich ein sehr seltsames Verhalten. Wenn die Tooltips angezeigt werden, werden sie von der zuletzt erstellten Komponente angezeigt, sodass es so aussieht, als ob <code> ; $options</code>ist in irgendeiner Weise „global“? </p> <p>Wenn Sie <code>tooltip</code> in <code>data</code> einfügen, sollte der Tooltip offensichtlich nicht reagieren und ich möchte ihn in <code> ;Daten</Code>. </p> <pre class="brush:html;toolbar:false;"><template> <i :class="['bi ', icon, hover && 'text-primary']" class="bg-body" @mouseover="hover = true; $options.tooltip.show();" @mouseleave="hover = false; $options.tooltip.hide();" @click="$options.tooltip.hide();" style="Cursor: Zeiger" :title="title" ref="icon" /> </template> <script> {Tooltip} aus „bootstrap“ importieren; Standard exportieren { Requisiten: ["Symbol", "Titel"], Tooltip: null, Daten() { zurückkehren { schweben: falsch } }, mount() { this.$options.tooltip = new Tooltip(this.$refs.icon,{ Platzierung: 'unten', Auslöser: 'manuell', Titel: this.title || ''. }); }, } </script> </pre></p>
P粉973899567P粉973899567451 Tage vor559

Antworte allen(1)Ich werde antworten

  • P粉404539732

    P粉4045397322023-08-26 14:57:42

    您可以直接在mounted()钩子中将非响应式属性附加到组件实例上:

    <script>
    export default {
      // tooltip: null,
      mounted() {
        // this.$options.tooltip = new Tooltip(...)
        this.tooltip = new Tooltip(...)
      },
    }
    </script>
    
    <template>
      <!-- BEFORE -->
      <i
          @mouseover="hover = true; $options.tooltip.show();"
          @mouseleave="hover = false; $options.tooltip.hide();"
          @click="$options.tooltip.hide();"
          ref="icon"
      />
    
      <!-- AFTER -->
      <i
          @mouseover="hover = true; tooltip.show();"
          @mouseleave="hover = false; tooltip.hide();"
          @click="tooltip.hide();"
          ref="icon"
      />
    </template>
    

    演示

    Antwort
    0
  • StornierenAntwort