Utiliser des variables définies dans des méthodes dans des modèles
P粉681400307
P粉681400307 2024-04-06 18:10:25
0
2
672

C'est la première fois que j'utilise Vue (v2 et non v3) et j'ai essayé d'utiliser des variables dans des modèles (définis dans des méthodes).

Mon code simplifié :

<template>
  <div class="container" @mouseover="isHovered = true" @mouseleave="isHovered = false">
    <div class="c-container">
      <div ref="topCContainerRef" class="top-c-container">
        <div
          :class="['top-c', ...]"
          :style="{ height: `${isHovered ? 0 : this.scaledHeight}` }" // <-- HERE I need `scaledHeight`
        >
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import { scaleLinear } from 'd3-scale'

export default {
  name: 'MyComponent',
  components: {  },
  props: {
    ...,
    datum: {
      type: Number,
      required: true,
    },
    ...
  },
  data: function () {
    return {
      isHovered: false,
      scaledHeight: {},
    }
  },
  mounted() {
    this.matchHeight()
  },
  methods: {
    matchHeight() {
      const topCContainerHeight = this.$refs.topCContainerRef.clientHeight
      const heightScale = scaleLinear([0, 100], [20, topCContainerHeight])
      const scaledHeight = heightScale(this.datum)
      this.scaledHeight = scaledHeight // I want to use this value inside the template
    },
  },
}
</script>

Comment obtenir la valeur de scaledHeight dans la section modèle ?

Si je n'utilise pas this, je n'obtiens pas d'erreur, mais la valeur de hauteur est toujours 0, comme si this,我不会收到错误,但高度值始终为 0,就像 scaledHeight était ignoré.

J'ai lu la documentation mais cela ne m'a pas aidé

P粉681400307
P粉681400307

répondre à tous(2)
P粉729198207

J'ai rencontré et résolu ce problème aujourd'hui. Vous pouvez changer le style comme ci-dessous.

Cela fonctionne très bien pour moi, j'espère que cela vous aidera~~

P粉186017651

Utiliser compulatedRéparer

computed: {
    computedHeight: function () {
      return this.isHovered ? 0 : this.matchHeight()
    },
},
methods: {
    matchHeight() {
      const topCContainerHeight = this.$refs.topCContainerRef.clientHeight
      const heightScale = scaleLinear([0, 100], [20, topCContainerHeight])
      return heightScale(this.datum)
    },
  },
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal