Lösung für das Problem des wiederholten Auslösens von Funktionen in der Vue-Projektüberwachung

Lösung für das Problem des wiederholten Auslösens von Funktionen in der Vue-Projektüberwachung

Problembeschreibung:

Es gibt zwei Seiten A und B, jede Seite hat eine getList() Methode. Beide Methoden müssen denselben Parameter C übergeben und der Vorgang der Auswahl des Parameters C ist ziemlich kompliziert. Um das Problem der wiederholten Auswahl von Parameter C beim Wechseln zwischen den Schnittstellen A und B zu vermeiden, speichere ich Parameter C in vuex und höre dann mit watch auf beiden Seiten auf Parameter C, um getList() auszuführen. Dann habe ich ein Problem festgestellt. Wenn ich nach dem Aufrufen von Seite A auf Seite B den Parameter C auf Seite B erneut auswähle, wird auch die Methode getList() von Seite A ausgeführt. Umgekehrt wird auch die Methode getList() von Seite B ausgeführt, wenn ich nach dem Aufrufen von Seite B auf Seite A den Parameter C auf Seite A ändere.

Später fand ich heraus, dass es an der Verwendung von Keep-Alive lag. Keep-Alive hält die Vue-Instanz immer im Speicher, sodass die Vue-Instanz immer existiert und die entsprechenden Watcher immer wirksam sind. Nachdem ich nach relevanten Informationen gesucht hatte, stellte ich fest, dass viele Leute auf dieses Problem gestoßen waren. Schließlich fand ich die folgenden zwei Lösungen:

Lösung 1

Bestimmen Sie, ob getList() über den Routerpfad ausgeführt werden soll

betrachten:
        irgendeinWert(neuerWert, alterWert) {
            if (this.$route.fullPath === 'Ein Seitenroutingpfad') {
                // etwas tun
            }
        }
    }

Lösung 2

Fügen Sie einen Flag-Parameter hinzu, um zu bestimmen, ob sich die Seite im aktiven Status befindet. Komponenten, die Keep-Alive-Caching verwenden, lösen nur activated und deactivated Ereignisse aus. Setzen Sie das Flag daher auf „true“ und „false“, wenn diese beiden Ereignisse ausgelöst werden. Nur wenn das Flag „true“ ist, wird getList() ausgeführt.

{
  Daten () {
    zurückkehren {
      aktiviertFlag: false
    };
  },
  betrachten:
    'irgendeinWert'(Wert) {
      wenn(val && this.activatedFlag) {
        dies.getlist();
      }
    }
  },
  aktiviert () {
    this.activatedFlag = wahr;
  },
  deaktiviert () {
    this.activatedFlag = falsch;
  }
}

Wenn viele Seiten vorhanden sind und die Funktionsnamen auf den einzelnen Seiten inkonsistent sind, können Sie den Überwachungsteil des obigen Codes entfernen, in ein Mixin schreiben und es dann auf der erforderlichen Seite importieren.

  importiere activeFlag aus "@/mixin/activeFlag";

  Standard exportieren {
    Mixins: [aktive Flagge],
    betrachten:
        'irgendeinWert'(Wert) {
          wenn(val && this.activatedFlag) {
            dies.getlistA();
            dies.getlistB();
          }
        }
      },
  }

Oben sind die Details der beiden Lösungen für das Problem des wiederholten Auslösens von Funktionen in der Vue-Projektüberwachung aufgeführt. Weitere Informationen zur Lösung des wiederholten Auslösens von Vue-Überwachungsfunktionen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Lösung zum automatischen Auslösen von Klickereignissen beim Klicken auf ein Popup-Fenster in Vue (Simulationsszenario)
  • Lösen Sie das Auslöseproblem des Änderungsereignisses, wenn Vue ElementUI El-Select verwendet.
  • Detaillierte Erklärung des Ereignisses zum Auslösen von untergeordneten Komponenten durch Klicken auf Schaltflächen in übergeordneten Komponenten in Vue
  • Vue verhindert das Auslösen mehrerer Anfragen nach aufeinanderfolgenden Klicks in einem kurzen Zeitraum
  • Eine kurze Diskussion über die Auslösebedingungen von vue.watch
  • So realisieren Sie die automatische Auslösefunktion in Vue

<<:  So installieren Sie mehrere mysql5.7.19 (tar.gz)-Dateien unter Linux

>>:  Seltsame und interessante Docker-Befehle, die Sie vielleicht nicht kennen

Artikel empfehlen

Implementierung der Remote-Linux-Entwicklung mit vscode

Verabschieden Sie sich von der Vergangenheit Bevo...

36 Prinzipien der MySQL-Datenbankentwicklung (Zusammenfassung)

Vorwort Diese Prinzipien sind aus tatsächlichen K...

HTML-Code für Multiheader-Tabellen

1. Code der Multiheader-Tabelle Code kopieren Der ...

MySQL-Komplettabsturz: Detaillierte Erklärung der Abfragefilterbedingungen

Überblick In tatsächlichen Geschäftsszenarioanwen...

Verwendung von VNode in Vue.js

Was ist VNode In vue.js gibt es eine VNode-Klasse...

So löschen Sie schwebenden Beispielcode in CSS

Überblick Das Rahmendiagramm dieses Artikels ist ...

Teilen Sie einen auf Ace basierenden Markdown-Editor

Ich denke, Editoren lassen sich in zwei Kategorie...

Der Unterschied zwischen JS-Pre-Parsing und Variablen-Promotion im Web-Interview

Inhaltsverzeichnis Was ist eine Voranalyse? Der U...

MySQL verwendet ein Limit, um die Beispielmethode für Paging zu implementieren

1. Grundlegende Implementierung des Limits Im All...

So zeigen Sie in CocosCreator eine Textur an der Wischposition an

Inhaltsverzeichnis 1. Projektanforderungen 2. Dok...

Detaillierte Erläuterung der Verwendung der Vue3-Statusverwaltung

Inhaltsverzeichnis Hintergrund Bereitstellen / In...