Heim häufiges Problem So übergeben Sie einen Wert an die Vue-Komponente

So übergeben Sie einen Wert an die Vue-Komponente

Jul 18, 2023 am 09:27 AM
vue vue组件传值

Vue-Komponenten geben den Wert auf folgende Weise weiter: 1. Weitergabe vom Sohn an den Vater 3. Weitergabe des Werts mit Fragezeichen, Doppelpunkt und Eltern-Kind-Komponente; . Verwenden Sie „$ref“, um den Wert zu übergeben. 6. Verwenden Sie „inject“, um die Daten der übergeordneten Komponente in die aktuelle Instanz einzufügen. 10. Wert an sessionStorage übergeben; 11. vuex.

So übergeben Sie einen Wert an die Vue-Komponente

1. Übergeben Sie die übergeordnete Komponente an die untergeordnete Komponente. Definieren Sie Requisiten in der untergeordneten Komponente, d. h. props:['msg'], msg kann ein Objekt oder ein grundlegender Datentyp sein Sie möchten einen Standardwert definieren, also props: {msg: {type: String, default: 'hello world'}},

Wenn der Standardwert ein Objekttyp ist: props: { msg: { type: Object , Standard: () => { return { name: 'dan_seek' } } }}

Es ist zu beachten, dass diese Wertübertragung nur in eine Richtung erfolgt. Sie können den Wert der übergeordneten Komponente nicht ändern (außer bei Referenztypen von natürlich); und wenn Sie den Wert von Requisiten direkt ändern, wird eine Warnung angezeigt.

Die empfohlene Schreibweise besteht darin, eine Variable in data() (siehe Children.vue) neu zu definieren und ihr Requisiten zuzuweisen. Natürlich sind auch berechnete Eigenschaften akzeptabel.

Children.vue

<template>
    <section>
        父组件传过来的消息是:{{myMsg}}
    </section>
</template>
<script>
    export default {
        name: "Children",
        components: {},
        props:[&#39;msg&#39;],
        data() {
            return {
                myMsg:this.msg
            }
        },
        methods: {}
    }
</script>
Nach dem Login kopieren

Parent.vue

<template>
  <div class="parent">
    <Children :msg="message"></Children>
  </div>
</template>
<script>
import Children from &#39;../components/Children&#39;
export default {
  name: &#39;Parent&#39;,
  components: {
      Children
  },
  data() {
      return {
          message:&#39;hello world&#39;
}
},
}
</script>
Nach dem Login kopieren

2. Übergeben Sie die untergeordnete Komponente an die übergeordnete Komponente. Sie müssen hier ein benutzerdefiniertes Ereignis verwenden. Verwenden Sie this.$emit('myEvent'), um es in der auszulösen Untergeordnete Komponente und dann in der übergeordneten Komponente @myEvent-Überwachung in der Komponente verwenden

Children.vue

<template>
    <section>
        <br>
        <div @click="clickme">click me</div>
    </section>
</template>
<script>
    export default {
        name: "Children",
        components: {},
        data() {
            return {
                childNum:0
            }
        },
        methods: {
            clickme(){
                // 通过自定义事件addNum把值传给父组件
                this.$emit(&#39;addNum&#39;,this.childNum++)
            }
        }
    }
</script>
Nach dem Login kopieren

Parent.vue

<template>
    <div class="parent">
        这里是计数:{{parentNum}}
        <Children-Com @addNum="getNum"></Children-Com>
    </div>
</template>
<script>
    import ChildrenCom from &#39;../components/Children&#39;
    export default {
        name: &#39;Parent&#39;,
        components: {
            ChildrenCom
        },
        data() {
            return {
                parentNum: 0
            }
        },
        methods:{
            // childNum是由子组件传入的
            getNum(childNum){
                this.parentNum = childNum
            }
        }
    }
</script>
Nach dem Login kopieren

3. Übergeben Sie Werte zwischen Geschwisterkomponenten

Verwenden Sie die Auslöse- und Überwachungsfunktionen von benutzerdefinierten Ereignissen emit, um einen öffentlichen Ereignisbus eventBus zu definieren, über den wir als Zwischenbrücke Werte an jede Komponente übergeben können. Und durch die Verwendung von eventBus können Sie Ihr Verständnis von Emission vertiefen.

EventBus.js

import Vue from &#39;vue&#39;export default new Vue()
Children1.vue
<template>    <section>        <div @click="pushMsg">push message</div>        <br>    </section></template><script>    import eventBus from &#39;./EventBus&#39;    export default {        name: "Children1",        components: {},        data() {            return {                childNum:0            }        },        methods: {            pushMsg(){            // 通过事件总线发送消息                eventBus.$emit(&#39;pushMsg&#39;,this.childNum++)            }        }    }</script>
Nach dem Login kopieren

Children2.vue

<template>
    <section>
        children1传过来的消息:{{msg}}
    </section>
</template>
<script>
    import eventBus from &#39;./EventBus&#39;
    export default {
        name: "Children2",
        components: {},
        data() {
            return {
                msg: &#39;&#39;
            }
        },
        mounted() {
        // 通过事件总线监听消息
            eventBus.$on(&#39;pushMsg&#39;, (children1Msg) => {
                this.msg = children1Msg
            })
        }
    }
</script>
Nach dem Login kopieren

Parent.vue

<template>
    <div class="parent">
        <Children1></Children1>
        <Children2></Children2>
    </div>
</template>
<script>
    import Children1 from &#39;../components/Children1&#39;
    import Children2 from &#39;../components/Children2&#39;
    export default {
        name: &#39;Parent&#39;,
        components: {
            Children1,
            Children2
        },
        data() {
            return {
            }
        },
        methods:{
        }
    }
</script>
Nach dem Login kopieren

Es gibt auch eine Open-Source-Vue-Bus-Bibliothek auf Github, Sie können darauf verweisen: https://github.com/yangmingshan/vue -bus#readme

4. Übergeben Sie Werte zwischen Routen

i Verwenden Sie Fragezeichen, um Werte zu übergeben

Wenn Seite A zu Seite B springt, verwenden Sie dies.$router.push('/B?name=danseek' )

B-Seite kann dies $route.query.name verwenden, um den von Seite A übergebenen Wert zu erhalten.

Bitte beachten Sie den Unterschied zwischen Router und Route oben.

{
    path: &#39;/b/:name&#39;,
    name: &#39;b&#39;,
    component: () => import( &#39;../views/B.vue&#39;)
  },
Nach dem Login kopieren

Auf Seite B können Sie diesen.$route .params.name übergeben, um den Wert des von der Route übergebenen Namens zu erhalten

iii Verwenden Sie die Eltern-Kind-Komponente, um den Wert zu übergeben

Da der Router-. Da die Ansicht selbst ebenfalls eine Komponente ist, können wir den Wert auch über die übergeordnete/untergeordnete Komponente übergeben und sie dann im entsprechenden Abschnitt zur Unterseite hinzufügen. Da die Route nach der Typaktualisierung nicht aktualisiert wird, können Sie die neueste Version nicht direkt abrufen Geben Sie value in den gemounteten Hook der Unterseite ein. Stattdessen müssen Sie watch verwenden.

<router-view :type="type"></router-view>
// 子页面
......
props: [&#39;type&#39;]
......
watch: {
            type(){
                // console.log("在这个方法可以时刻获取最新的数据:type=",this.type)
            },
        },
Nach dem Login kopieren

5. Verwenden Sie $ref, um einen Wert zu übergeben

Verwenden Sie die Fähigkeit von $ref, eine ID für die untergeordnete Komponente zu definieren. Über diese ID kann die übergeordnete Komponente direkt auf die Methoden und Eigenschaften zugreifen eine untergeordnete Komponente Children.vue

<template>
    <section>
        传过来的消息:{{msg}}
    </section>
</template>
<script>
    export default {
        name: "Children",
        components: {},
        data() {
            return {
                msg: &#39;&#39;,
                desc:&#39;The use of ref&#39;
            }
        },
        methods:{
            // 父组件可以调用这个方法传入msg
            updateMsg(msg){
                this.msg = msg
            }
        },
    }
</script>
Nach dem Login kopieren

Dann verweisen Sie auf Children.vue in der übergeordneten Komponente Parent.vue und definieren Sie das ref-Attribut

<template>
    <div class="parent">
        <!-- 给子组件设置一个ID ref="children" -->
        <Children ref="children"></Children>
        <div @click="pushMsg">push message</div>
    </div>
</template>
<script>
    import Children from &#39;../components/Children&#39;
    export default {
        name: &#39;parent&#39;,
        components: {
            Children,
        },
        methods:{
            pushMsg(){
                // 通过这个ID可以访问子组件的方法
                this.$refs.children.updateMsg(&#39;Have you received the clothes?&#39;)
                // 也可以访问子组件的属性
                console.log(&#39;children props:&#39;,this.$refs.children.desc)
            }
        },
    }
</script>
Nach dem Login kopieren

6. Angenommen, die übergeordnete Komponente hat eine Methode getName(), die allen Nachkommen bereitgestellt werden muss. Mit der Option „provide“ können wir die Daten/Methoden angeben, die wir den Nachkommenkomponenten bereitstellen möchten. Dann können wir in jeder Nachkommenkomponente „inject“ verwenden, um die Daten einzufügen /Methoden der übergeordneten Komponente in die aktuelle Instanz:

provide: function () {
  return {
    getName: this.getName()
  }
}
Nach dem Login kopieren

Parent.vue

inject: [&#39;getName&#39;]
Nach dem Login kopieren

Children.vue

<template>
    <div class="parent">
        <Children></Children>
    </div>
</template>
<script>
    import Children from &#39;../components/Children&#39;
    export default {
        name: &#39;Parent&#39;,
        components: {
            Children,
        },
        data() {
            return {
                name:&#39;dan_seek&#39;
            }
        },
        provide: function () {
            return {
                getName: this.name
            }
        },
    }
</script>
Nach dem Login kopieren

7. Ahnenenkel $attrs

Normalerweise müssen Sie die Requisiten des Vaters als Zwischenübergang verwenden, aber in Auf diese Weise verfügt die Vaterkomponente über mehr Dinge, die nichts mit dem Geschäft der übergeordneten Komponente zu tun haben, und kann mit Hilfe von $attrs vereinfacht werden, und es besteht keine Notwendigkeit, den Vorfahren oder Enkel zu ändern Name: Großvater

Unterkomponente erhalten

Name des Großvaters:

Geschlecht des Großvaters: Männlich

Alter des Großvaters: 88

Hobby des Großvaters: Code

8, Vorfahr des Enkels

Mit der Hilfe von. $listeners Mittlere Ereignisse, der Enkel kann Benachrichtigen Sie bequem den Vorfahren. Codebeispiele finden Sie unter 7

9, $parent

Sie können die Instanz der übergeordneten Komponente über parent abrufen und dann über diese Instanz auf die Eigenschaften und Methoden der übergeordneten Komponente zugreifen Bruder Root. Sie können die Root-Komponenteninstanz erhalten.

Syntax:


<script>
    export default {
        name: "Children",
        components: {},
        data() {
            return {
            }
        },
        inject: [&amp;#39;getName&amp;#39;],
    }
</script>
Nach dem Login kopieren

Im Beispiel der Übergabe einer untergeordneten Komponente an eine übergeordnete Komponente können Sie also this.$parent.getNum(100) verwenden, um den Wert an die übergeordnete Komponente zu übergeben.

10. SessionStorage-Wertübertragung

sessionStorage ist ein globales Objekt des Browsers und die darin gespeicherten Daten werden gelöscht, wenn die Seite geschlossen wird. Mit dieser Funktion können wir eine Kopie der Daten auf allen Seiten teilen.

Syntax:

<template>
    <section>
        <parent name="grandParent" sex="男" age="88" hobby="code" @sayKnow="sayKnow"></parent>
    </section>
</template>
<script>
    import Parent from &#39;./Parent&#39;
    export default {
        name: "GrandParent",
        components: {
          Parent
        },
        data() {
            return {}
        },
        methods: {
          sayKnow(val){
            console.log(val)
          }
        },
        mounted() {
        }
    }
</script>
Nach dem Login kopieren

Hinweis: Es speichert Schlüssel-Wert-Paare, die nur String-Typen sein können. Wenn Sie Objekte speichern möchten, müssen Sie let objStr = JSON.stringify(obj) verwenden, um sie in Strings umzuwandeln Speichern Sie sie (verwenden Sie sie, wenn let obj = JSON.parse(objStr) in ein Objekt analysiert wird).

Ist es mühsam, solche Objekte zu speichern? Ich empfehle eine Bibliothek mit gutem Speicher, die sessionStorage kapselt, und Sie können deren API direkt zum Speichern von Objekten verwenden

<template>
  <section>
    <p>父组件收到</p>
    <p>祖父的名字:{{name}}</p>
    <children v-bind="$attrs" v-on="$listeners"></children>
  </section>
</template>
<script>
  import Children from &#39;./Children&#39;
  export default {
    name: "Parent",
    components: {
      Children
    },
    // 父组件接收了name,所以name值是不会传到子组件的
    props:[&#39;name&#39;],
    data() {
      return {}
    },
    methods: {},
    mounted() {
    }
  }
</script>
Nach dem Login kopieren

11, vuex

Ich werde hier nicht vorstellen, wie man dieses berühmte Vuex verwendet, da es zu lang wäre, es klar zu schreiben ...

Wenn Sie nicht vorhaben, eine große einseitige Anwendung zu entwickeln, kann die Verwendung von Vuex sinnvoll sein umständlich und überflüssig. Es stimmt – wenn Ihre App einfach genug ist, müssen Sie Vuex wahrscheinlich nicht verwenden.

Das obige ist der detaillierte Inhalt vonSo übergeben Sie einen Wert an die Vue-Komponente. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verweisen Sie auf die JS -Datei mit Vue.js So verweisen Sie auf die JS -Datei mit Vue.js Apr 07, 2025 pm 11:27 PM

Es gibt drei Möglichkeiten, sich auf JS -Dateien in Vue.js zu beziehen: Geben Sie den Pfad direkt mit dem & lt; Skript & gt an. Etikett;; Dynamischer Import mit dem montierten () Lebenszyklushaken; und importieren über die Vuex State Management Library.

So verwenden Sie Watch in Vue So verwenden Sie Watch in Vue Apr 07, 2025 pm 11:36 PM

Mit der Watch -Option in Vue.js können Entwickler auf Änderungen in bestimmten Daten anhören. Wenn sich die Daten ändert, löst sich eine Rückruffunktion aus, um Aktualisierungsansichten oder andere Aufgaben auszuführen. Zu den Konfigurationsoptionen gehören unmittelbar, die festlegen, ob ein Rückruf sofort ausgeführt werden soll, und Deep, das feststellt, ob Änderungen an Objekten oder Arrays rekursiv anhören sollen.

So fügen Sie Funktionen zu Schaltflächen für Vue hinzu So fügen Sie Funktionen zu Schaltflächen für Vue hinzu Apr 08, 2025 am 08:51 AM

Sie können der VUE -Taste eine Funktion hinzufügen, indem Sie die Taste in der HTML -Vorlage an eine Methode binden. Definieren Sie die Methode und schreiben Sie die Funktionslogik in der VUE -Instanz.

So verwenden Sie Bootstrap in Vue So verwenden Sie Bootstrap in Vue Apr 07, 2025 pm 11:33 PM

Die Verwendung von Bootstrap in Vue.js ist in fünf Schritte unterteilt: Startstrap installieren. Bootstrap in main.js. Verwenden Sie die Bootstrap -Komponente direkt in der Vorlage. Optional: benutzerdefinierter Stil. Optional: Verwenden Sie Plug-Ins.

So kehren Sie von Vue zur vorherigen Seite zurück So kehren Sie von Vue zur vorherigen Seite zurück Apr 07, 2025 pm 11:30 PM

VUE.JS hat vier Methoden, um zur vorherigen Seite zurückzukehren: $ router.go (-1) $ router.back () verwendet & lt; Router-Link to = & quot;/& quot; Komponentenfenster.history.back () und die Methodenauswahl hängt von der Szene ab.

Vue realisiert Festzelt-/Text -Scrolling -Effekt Vue realisiert Festzelt-/Text -Scrolling -Effekt Apr 07, 2025 pm 10:51 PM

Implementieren Sie Marquee/Text-Scrolling-Effekte in VUE unter Verwendung von CSS-Animationen oder Bibliotheken von Drittanbietern. In diesem Artikel wird die Verwendung von CSS -Animation vorgestellt: Bildlauftext erstellen und Text mit & lt; div & gt;. Definieren Sie CSS -Animationen und setzen Sie Überlauf: Versteckt, Breite und Animation. Definieren Sie Keyframes, setzen Sie Transformation: Translatex () am Anfang und am Ende der Animation. Passen Sie die Animationseigenschaften wie Dauer, Bildlaufgeschwindigkeit und Richtung an.

Was bedeutet es für faule Ladungsvue? Was bedeutet es für faule Ladungsvue? Apr 07, 2025 pm 11:54 PM

In Vue.js können Komponenten oder Ressourcen bei Bedarf dynamisch geladen werden, wodurch die Ladezeit der Anfangsseite dynamisch geladen und die Leistung verbessert wird. Die spezifische Implementierungsmethode umfasst die Verwendung & lt; Keep-Alive & GT; und & lt; Komponente ist & gt; Komponenten. Es ist zu beachten, dass fauler Laden FOUC -Probleme (Splace Screen) verursachen kann und nur für Komponenten verwendet werden sollte, die eine faule Belastung erfordern, um unnötige Leistungsaufwand zu vermeiden.

So fragen Sie die Version von Vue So fragen Sie die Version von Vue Apr 07, 2025 pm 11:24 PM

Sie können die Vue -Version mit Vue Devtools abfragen, um die Registerkarte VUE in der Konsole des Browsers anzuzeigen. Verwenden Sie NPM, um den Befehl "npm list -g vue" auszuführen. Suchen Sie das Vue -Element im Objekt "Abhängigkeiten" der Datei package.json. Führen Sie für Vue -CLI -Projekte den Befehl "Vue --version" aus. Überprüfen Sie die Versionsinformationen im & lt; Skript & gt; Tag in der HTML -Datei, die sich auf die VUE -Datei bezieht.