Inhaltsverzeichnis
Methoden " >Methoden
计算属性" >计算属性
观察者" >观察者
结论" >结论
Heim Web-Frontend View.js Der Unterschied zwischen berechneten Eigenschaften, Methoden und Überwachung in Vue

Der Unterschied zwischen berechneten Eigenschaften, Methoden und Überwachung in Vue

Sep 27, 2020 pm 06:09 PM
computed methods vue watch

Der Unterschied zwischen berechneten Eigenschaften, Methoden und Überwachung in Vue

Für diejenigen, die gerade erst anfangen, Vue zu lernen, können die Unterschiede zwischen Methoden, berechneten Eigenschaften und Beobachtern etwas verwirrend sein. Auch wenn Sie mit jedem von ihnen oft mehr oder weniger das Gleiche erreichen können, ist es wichtig zu wissen, inwiefern sie besser sind als die anderen.

In diesem kurzen Tipp befassen wir uns mit diesen drei wichtigen Aspekten von Vue-Anwendungen und ihren Anwendungsfällen. Wir werden mit jeder dieser drei Methoden dieselbe Suchkomponente erstellen.

Methoden

Methoden sind mehr oder weniger das, was Sie erwarten würden – eine Funktion, die eine Eigenschaft eines Objekts ist. Sie können Methoden verwenden, um auf Ereignisse zu reagieren, die im DOM auftreten, oder Sie können sie von einer anderen Stelle in der Komponente aufrufen (z. B. in einer berechneten Eigenschaft oder einem Beobachter). Methoden werden verwendet, um häufig verwendete Funktionen zu gruppieren – zum Beispiel für die Bearbeitung von Formularübermittlungen oder den Aufbau wiederverwendbarer Funktionen, wie zum Beispiel das Senden von Ajax-Anfragen.

Sie können eine Methode in einer Vue-Instanz innerhalb des Methodenobjekts erstellen:

new Vue({
  el: "#app",
  methods: {
    handleSubmit() {}
  }
})
Nach dem Login kopieren

Wenn Sie sie in einer Vorlage verwenden möchten, können Sie Folgendes tun:

<div id="app">
  <button @click="handleSubmit">
    Submit
  </button>
</div>
Nach dem Login kopieren

Wir hängen den Event-Handler mit dem v-on an Direktive zu unserem DOM-Element, das auch mit dem Symbol @ abgekürzt werden kann. Die Methode „handleSubmit“ wird jedes Mal aufgerufen, wenn auf die Schaltfläche geklickt wird. Wenn Sie beispielsweise die erforderlichen Parameter im Methodenkörper übergeben möchten, können Sie Folgendes tun: @符号。

handleSubmit方法将在每次单击按钮时被调用。例如,当你想要传递方法体中需要的参数时,你可以执行以下操作:

<div id="app">
  <button @click="handleSubmit(event)">
    Submit
  </button>
</div>
Nach dem Login kopieren

在这里,我们传递了一个事件对象,例如,它可以防止我们在提交表单时阻止浏览器的默认操作。

但是,由于我们使用指令附加事件,因此可以利用修饰符更优雅地实现同一件事:@click.stop="handleSubmit"

现在,让我们看一个使用方法筛选数组中的数据列表的示例。

在演示中,我们要呈现数据列表和搜索框。每当用户在搜索框中输入值时,呈现的数据都会更改。模板将如下所示:

<div id="app">
  <h2>Language Search</h2>

  <div class="form-group">
    <input
      type="text"
      v-model="input"
      @keyup="handleSearch"
      placeholder="Enter language"
      class="form-control"
    />
  </div>

  <ul v-for="(item, index) in languages" class="list-group">
    <li class="list-group-item" :key="item">{{ item }}</li>
  </ul>
</div>
Nach dem Login kopieren

正如您所看到的,我们引用一个handleSearch方法,每次用户在搜索字段中键入内容时都会调用该方法。我们需要创建方法和数据:

new Vue({
  el: &#39;#app&#39;,
  data() {
    return {
      input: &#39;&#39;,
      languages: []
    }
  },
  methods: {
    handleSearch() {
      this.languages = [
        &#39;JavaScript&#39;,
        &#39;Ruby&#39;,
        &#39;Scala&#39;,
        &#39;Python&#39;,
        &#39;Java&#39;,
        &#39;Kotlin&#39;,
        &#39;Elixir&#39;
      ].filter(item => item.toLowerCase().includes(this.input.toLowerCase()))
    }
  },
  created() { this.handleSearch() }
})
Nach dem Login kopieren

handleSearch方法使用输入字段的值更新列出的项目。需要注意的一件事是,在methods对象中,不需要使用this.handleSearch引用该方法(在react中必须这样做)。

计算属性

尽管以上示例中的搜索按预期工作,但更优雅的解决方案是使用计算属性。 计算属性对于从现有资源中组合新数据非常方便,并且与方法相比,它们的一大优点是可以缓存其输出。 这意味着,如果页面上与计算属性无关的某些内容发生更改,并且UI会重新呈现,则将返回缓存的结果,并且将不会重新计算计算属性,从而为我们节省了潜在的昂贵操作。

计算属性使我们能够使用可用的数据即时进行计算。 在这种情况下,我们有一系列需要排序的项目。 我们想要在用户在输入字段中输入值时进行排序。

我们的模板看起来与之前的迭代几乎相同,除了我们向v-for指令传递了一个计算属性(filteredList):

<div id="app">
  <h2>Language Search</h2>
  <div class="form-group">
    <input
      type="text"
      v-model="input"
      placeholder="Enter language"
      class="form-control"
    />
  </div>
  <ul v-for="(item, index) in filteredList" class="list-group">
    <li class="list-group-item" :key="item">{{ item }}</li>
  </ul>
</div>
Nach dem Login kopieren

脚本部分略有不同。我们在data属性中声明语言(以前这是一个空数组),而不是将方法转移到计算属性中的方法:

new Vue({
  el: "#app",
  data() {
    return {
      input: &#39;&#39;,
      languages: [
        "JavaScript",
        "Ruby",
        "Scala",
        "Python",
        "Java",
        "Kotlin",
        "Elixir"
      ]
    }
  },
  computed: {
    filteredList() {
      return this.languages.filter((item) => {
        return item.toLowerCase().includes(this.input.toLowerCase())
      })
    }
  }
})
Nach dem Login kopieren

filteredList 计算的属性将包含一个包含输入字段值的项目数组。 在第一次渲染时(当输入字段为空时),将渲染整个数组。 当用户在字段中输入值时,filteredList

computed: {
  fullName() {
    return `${this.firstName} ${this.lastName}`
  }
}
Nach dem Login kopieren
Nach dem Login kopieren

Hier übergeben wir ein Event-Objekt

, das uns beispielsweise daran hindert, die Standardaktion des Browsers beim Absenden eines Formulars zu blockieren.

Da wir jedoch Ereignisse mithilfe von Anweisungen anhängen, können wir Modifikatoren

verwenden eleganter Um dasselbe zu erreichen: @click.stop="handleSubmit". 🎜🎜Sehen wir uns nun ein Beispiel für die Verwendung einer Methode zum Filtern einer Liste von Daten in einem Array an. 🎜🎜In der Demo möchten wir die Datenliste und das Suchfeld rendern. Immer wenn der Benutzer einen Wert in das Suchfeld eingibt, ändern sich die gerenderten Daten. Die Vorlage sieht folgendermaßen aus: 🎜
<div id="app">
  <h2>Language Search</h2>

  <div class="form-group">
    <input
      type="text"
      v-model="input"
      placeholder="Enter language"
      class="form-control"
    />
  </div>

  <ul v-for="(item, index) in languages" class="list-group">
    <li class="list-group-item" :key="item">{{ item }}</li>
  </ul>
</div>
Nach dem Login kopieren
Nach dem Login kopieren
🎜Wie Sie sehen können, verweisen wir auf eine handleSearch-Methode, die jedes Mal aufgerufen wird, wenn der Benutzer etwas in das Suchfeld eingibt. Wir müssen Methoden und Daten erstellen: Die Methode 🎜
new Vue({
  el: "#app",
  data() {
    return {
      input: &#39;&#39;,
      languages: []
    }
  },
  watch: {
    input: {
      handler() {
        this.languages = [
          &#39;JavaScript&#39;,
          &#39;Ruby&#39;,
          &#39;Scala&#39;,
          &#39;Python&#39;,
          &#39;Java&#39;,
          &#39;Kotlin&#39;,
          &#39;Elixir&#39;
        ].filter(item => item.toLowerCase().includes(this.input.toLowerCase()))
      },
      immediate: true
    }
  }})
Nach dem Login kopieren
Nach dem Login kopieren
🎜handleSearch aktualisiert die aufgelisteten Elemente mit dem Wert des Eingabefelds. Zu beachten ist, dass Sie im Methodenobjekt nicht mit this.handleSearch auf die Methode verweisen müssen (Sie müssen dies in React tun). 🎜🎜🎜🎜🎜Berechnete Eigenschaften🎜🎜🎜Während die Suche im obigen Beispiel wie erwartet funktioniert, ist die Verwendung von
Berechnete Eigenschaften 🎜. Berechnete Eigenschaften eignen sich sehr gut zum Kombinieren neuer Daten aus vorhandenen Ressourcen. Einer ihrer großen Vorteile gegenüber Methoden besteht darin, dass ihre Ausgabe zwischengespeichert werden kann. Das bedeutet, dass, wenn sich etwas auf der Seite ändert, das nicht mit der berechneten Eigenschaft zusammenhängt, und die Benutzeroberfläche neu gerendert wird, die zwischengespeicherten Ergebnisse zurückgegeben werden und die berechnete Eigenschaft nicht neu berechnet wird, was uns einen potenziell teuren Vorgang erspart. 🎜🎜Berechnete Eigenschaften ermöglichen es uns, Berechnungen im Handumdrehen anhand der verfügbaren Daten durchzuführen. In diesem Fall haben wir eine Reihe von Artikeln, die sortiert werden müssen. Wir möchten sortieren, wenn der Benutzer einen Wert in das Eingabefeld eingibt. 🎜🎜Unsere Vorlage sieht fast genauso aus wie die vorherige Iteration, außer dass wir eine berechnete Eigenschaft (filteredList) an die v-for-Direktive übergeben: 🎜rrreee🎜Skriptabschnitt weggelassen Es gibt Unterschiede. Wir deklarieren die Sprache im Attribut data (zuvor war dies ein leeres Array), anstatt die Methode in eine berechnete Eigenschaft zu verschieben: 🎜rrreee🎜filteredList Die berechnete Eigenschaft enthält ein Array von Elementen, das die Eingabefeldwerte enthält. Beim ersten Rendern (wenn das Eingabefeld leer ist) wird das gesamte Array gerendert. Wenn der Benutzer einen Wert in das Feld eingibt, gibt filteredList ein Array zurück, das den in das Feld eingegebenen Wert enthält. 🎜🎜Bei der Verwendung berechneter Eigenschaften müssen die zu berechnenden Daten verfügbar sein, andernfalls kommt es zu einem Anwendungsfehler. 🎜🎜Die berechnete Eigenschaft erstellt eine neue filteredList-Eigenschaft, deshalb können wir in der Vorlage darauf verweisen. Jedes Mal, wenn sich eine Abhängigkeit ändert, ändert sich der Wert von filteredList. Die leicht zu ändernde Abhängigkeit ist hier der Wert der Eingabe. 🎜

最后,请注意,计算属性使我们可以创建一个变量,以在由一个或多个数据属性构建的模板中使用。一个常见的示例是fullName从用户的名字和姓氏创建一个,如下所示:

computed: {
  fullName() {
    return `${this.firstName} ${this.lastName}`
  }
}
Nach dem Login kopieren
Nach dem Login kopieren

在模板中,您可以执行{{fullName}}。每当第一个或最后一个名称的值发生变化时,fullName的值就会发生变化。

观察者

当您希望对发生的更改(例如,对一个道具或数据属性)执行一个操作时,观察者非常有用。正如Vue文档所述,当您希望执行异步或昂贵的操作来响应数据更改时,这是最有用的。

在我们的搜索示例中,我们可以返回到方法示例,并为input data属性设置一个监视程序。然后,我们可以对input值的任何变化做出反应。

首先,让我们还原模板以利用languages data属性:

<div id="app">
  <h2>Language Search</h2>

  <div class="form-group">
    <input
      type="text"
      v-model="input"
      placeholder="Enter language"
      class="form-control"
    />
  </div>

  <ul v-for="(item, index) in languages" class="list-group">
    <li class="list-group-item" :key="item">{{ item }}</li>
  </ul>
</div>
Nach dem Login kopieren
Nach dem Login kopieren

然后我们的Vue实例将如下所示:

new Vue({
  el: "#app",
  data() {
    return {
      input: &#39;&#39;,
      languages: []
    }
  },
  watch: {
    input: {
      handler() {
        this.languages = [
          &#39;JavaScript&#39;,
          &#39;Ruby&#39;,
          &#39;Scala&#39;,
          &#39;Python&#39;,
          &#39;Java&#39;,
          &#39;Kotlin&#39;,
          &#39;Elixir&#39;
        ].filter(item => item.toLowerCase().includes(this.input.toLowerCase()))
      },
      immediate: true
    }
  }})
Nach dem Login kopieren
Nach dem Login kopieren

在这里,我已经将观察者作为对象(而不是函数)。这样,我可以指定一个immediate属性,该属性将导致观察者在安装组件后立即触发。这具有填充列表的效果。然后,运行的函数在该handler属性中。

结论

正如他们所说,强大的力量伴随着巨大的责任。Vue为您提供了构建出色应用程序所需的超能力。知道何时使用它们是建立用户喜爱的关键。方法计算属性观察者是您可以使用的超能力的一部分。展望未来,一定要好好利用它们!

相关推荐:

2020年前端vue面试题大汇总(附答案)

vue教程推荐:2020最新的5个vue.js视频教程精选

更多编程相关知识,请访问:编程入门!!

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen berechneten Eigenschaften, Methoden und Überwachung in Vue. 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ß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 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 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.

Was bedeutet VUE Multi-Page-Entwicklung? Was bedeutet VUE Multi-Page-Entwicklung? Apr 07, 2025 pm 11:57 PM

VUE Multi-Page-Entwicklung ist eine Möglichkeit, Anwendungen mithilfe des Vue.js-Frameworks zu erstellen, in dem die Anwendung in separate Seiten unterteilt ist: Code-Wartung: Die Aufteilung der Anwendung in mehrere Seiten kann das Verwalten und Wartungsbereich erleichtern. Modularität: Jede Seite kann als separates Modul für eine einfache Wiederverwendung und den Austausch verwendet werden. Einfaches Routing: Die Navigation zwischen Seiten kann durch einfache Routing -Konfiguration verwaltet werden. SEO -Optimierung: Jede Seite hat eine eigene URL, die SEO hilft.

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.

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.

So verwenden Sie Funktionsabfangweserven So verwenden Sie Funktionsabfangweserven Apr 08, 2025 am 06:51 AM

Funktionsabfangen in VUE ist eine Technik, mit der die Häufigkeit, mit der eine Funktion eingerufen wird, innerhalb eines bestimmten Zeitraums aufgerufen wird und Leistungsprobleme verhindern. Die Implementierungsmethode lautet: Importieren Sie die Lodash -Bibliothek: importieren {dunounce} aus 'lodash'; Verwenden Sie die Dabounce -Funktion, um eine Intercept -Funktion zu erstellen: const dabouncedFunction = dunounce (() = & gt; { / logical /}, 500); Rufen Sie die Abfangfunktion auf und die Steuerfunktion wird höchstens einmal in 500 Millisekunden aufgerufen.

See all articles