Heim Web-Frontend js-Tutorial So verwenden Sie das Gültigkeitsbereichsattribut von style in vue

So verwenden Sie das Gültigkeitsbereichsattribut von style in vue

Jun 23, 2018 pm 05:55 PM
style vue

In diesem Artikel wird hauptsächlich das bereichsbezogene Attribut der vorsichtigen Verwendung von Stilen in Vue vorgestellt. Jetzt werde ich es mit Ihnen teilen und Ihnen eine Referenz geben. Folgen wir dem Editor und werfen wir einen Blick darauf

Um den Stil in der Vue-Komponente zu privatisieren (modularisieren) und die globale Situation nicht zu verschmutzen, können Sie dem Stil-Tag das Bereichsattribut hinzufügen, um anzuzeigen, dass dies nur der Fall ist gehört zum aktuellen Moment, das ist ein sehr guter Schachzug, aber warum sollte man ihn mit Vorsicht genießen? Denn wenn wir den Stil öffentlicher Komponenten (Bibliotheken von Drittanbietern oder projektspezifische Komponenten) ändern müssen, verursacht der Gültigkeitsbereich häufig größere Schwierigkeiten und erfordert zusätzliche Komplexität.

Das Prinzip der flächendeckenden Umsetzung privatisierter Stile

Warum wird es Ihrer Meinung nach die Komplexität erhöhen? Beginnen wir also mit den Prinzipien der Modulimplementierung. Zur Vereinfachung der Benennung gehen wir davon aus, dass diese Art von Komponente als private Modulkomponente bezeichnet wird und andere Komponenten ohne Gültigkeitsbereich als allgemeine Modulkomponenten bezeichnet werden.

Bei der Betrachtung der DOM-Struktur haben wir festgestellt, dass Vue der DOM-Struktur und dem CSS-Stil eindeutige und sich nicht wiederholende Tags hinzufügt, um Einzigartigkeit sicherzustellen und den Zweck der Privatisierung und Modularisierung des Stils zu erreichen. Das konkrete Rendering-Ergebnis wird anhand eines Beispiels erläutert.

Schaltflächenkomponente einer öffentlichen Komponente

Eine Schaltfläche einer öffentlichen Komponente. Um den Stil zu modularisieren, fügen Sie ihr das bereichsbezogene Attribut

//button.vue
<template>
  <p class="button-warp">
    <button class="button">text</button>
  </p>
</template>
...
<style scoped>
  .button-warp{
    display:inline-block;
  }
  .button{
    padding: 5px 10px;
    font-size: 12px;
    border-radus: 2px;
  }
</style>
Nach dem Login kopieren

<🎜 hinzu >Durchsuchen Der HTML-Teil und der CSS-Teil, die von der vom Browser gerenderten Schaltflächenkomponente

Schaltflächenkomponente gerendert werden, sind jeweils:

<p data-v-2311c06a class="button-warp">
  <button data-v-2311c06a class="button">text</button>
</p>
Nach dem Login kopieren
.button-warp[data-v-2311c06a]{
  display:inline-block;
}
.button[data-v-2311c06a]{
  padding: 5px 10px;
  font-size: 12px;
  border-radus: 2px;
}
Nach dem Login kopieren

Wie aus den obigen Wörtern ersichtlich ist, ist die Komponente mit der Bereichsattribut hinzugefügt. Um eine Modularisierung der Komponentenstile zu erreichen, wurden zwei Prozesse durchgeführt:

  1. Fügen Sie ein sich nicht wiederholendes Datenattribut (in der Form: data-v-2311c06a) hinzu HTML-DOM-Knoten zur Darstellung der Einzigartigkeit von

  2. Fügen Sie am Ende jedes CSS-Selektors (kompiliert und) einen Datenattributselektor der aktuellen Komponente hinzu (z. B. [data-v-2311c06a]). generierte CSS-Anweisung) ) zum Privatisieren von Stilen

Jeder weiß, dass CSS-Stile Priorität haben. Obwohl dieser Vorgang von Scoped den Zweck der Modularisierung von Komponentenstilen erfüllt, hat er Konsequenzen: Das Gewicht jedes Stils wird erhöht: Wenn wir diesen Stil ändern möchten, ist theoretisch eine höhere Gewichtung erforderlich, um diesen Stil abzudecken. Dies ist eine der Dimensionen, die die Komplexität erhöhen.

Andere Komponenten verweisen auf die Schaltflächenkomponente

Oben wird das Ergebnis des Renderns einer einzelnen Komponente analysiert. Was passiert also, nachdem sich die Komponenten gegenseitig aufgerufen haben? , insbesondere in zwei Situationen unterteilt: Allgemeine Modulkomponenten beziehen sich auf private Modulkomponenten (im Wesentlichen dasselbe wie private Modulkomponenten auf allgemeine Modulkomponenten);

Zum Beispiel: Wenn die Schaltflächenkomponente in der Komponente content.vue verwendet wird, was ist der Unterschied im Rendering-Ergebnis, wenn die Komponente content.vue das bereichsbezogene Attribut hinzufügt?

//content.vue
<template>
  <p class="content">
    <p class="title"></p>
    <!-- v-button假设是上面定义的组件 -->
    <v-button></v-button>
  </p>
</template>
...
<style>
  .content{
    width: 1200px;
    margin: 0 auto;
  }
  .content .button{
    border-raduis: 5px;
  }
</style>
Nach dem Login kopieren

Allgemeine Komponenten des Moduls (ohne Gültigkeitsbereich) verweisen auf private Komponenten des Moduls

Wenn das Attribut mit Gültigkeitsbereich nicht zum Stil hinzugefügt wird, lauten die gerenderten HTML- und CSS-Dateien wie folgt:

<p class="content">
  <p class="title"></p>
  <!-- v-button假设是上面定义的组件 -->
  <p data-v-2311c06a class="button-warp">
    <button data-v-2311c06a class="button">text</button>
  </p>
</p>
Nach dem Login kopieren
/*button.vue渲染出来的css*/
.button-warp[data-v-2311c06a]{
  display:inline-block;
}
.button[data-v-2311c06a]{
  padding: 5px 10px;
  font-size: 12px;
  border-radus: 2px;
}
/*content.vue渲染出来的css*/
.content{
  width: 1200px;
  margin: 0 auto;
}
.content .button{
  border-raduis: 5px;
}
Nach dem Login kopieren

Okay, es ist ersichtlich, dass, obwohl das Border-Raduis-Attribut der Schaltfläche in der Inhaltskomponente aufgrund der Gewichtsbeziehung geändert wird, der Stil innerhalb der Komponente weiterhin wirksam ist (zu diesem Zeitpunkt wird der externe Stil überschrieben). Wenn wir also den Zweck der Stiländerung erreichen möchten, müssen wir die Gewichtung des Stils erhöhen, den wir ändern möchten (Selektorebene, ID-Selektor, Parallelselektor, wichtig usw. hinzufügen)

Private Komponente des Moduls (bereichsgebunden hinzufügen) Private Komponente des Referenzmoduls

Was passiert, wenn das Attribut mit Gültigkeitsbereich hinzugefügt wird? Gemäß den zu Beginn analysierten Regeln (dies gilt auch):

Fügen Sie zuerst das Datenattribut

zu allen DOM-Knoten hinzu und fügen Sie dann am Ende den Datenattributselektor hinzu CSS-Selektor

Dann sind das gerenderte HTML und CSS:

<p data-v-57bc25a0 class="content">
  <p data-v-57bc25a0 class="title"></p>
  <!-- v-button假设是上面定义的组件 -->
  <p data-v-57bc25a0 data-v-2311c06a class="button-warp">
    <button data-v-2311c06a class="button">text</button>
  </p>
</p>
Nach dem Login kopieren
/*button.vue渲染出来的css*/
.button-warp[data-v-2311c06a]{
  display:inline-block;
}
.button[data-v-2311c06a]{
  padding: 5px 10px;
  font-size: 12px;
  border-radus: 2px;
}
/*content.vue渲染出来的css*/
.content[data-v-57bc25a0]{
  width: 1200px;
  margin: 0 auto;
}
.content .button[data-v-57bc25a0]{
  border-raduis: 5px;
}
Nach dem Login kopieren

Für die beiden oben genannten Situationen ist deutlich zu erkennen, dass die Rendering-Ergebnisse sehr unterschiedlich sind.

Obwohl wir im Inhalt Code hinzugefügt haben, um den Stil der Schaltflächenkomponente zu ändern, schauen Sie genau hin, da der .content .button-Satz am Ende mit dem Bereichs-Tag der Inhaltskomponente, dem letzten Satz, hinzugefügt wird hat tatsächlich den grundlegenden Effekt. Es befindet sich nicht auf dem DOM-Knoten, den wir wollen. In diesem Fall wirken sich alle Stile, die wir in den Inhalt schreiben, nicht auf die button.vue-Komponente aus, was peinlich ist. . . .

Natürlich kann dieses Problem auch gelöst werden, d Das style-Tag des bereichsbezogenen Attributs bedeutet das Hinzufügen von zwei Stilen, einem für private Stile und einem für öffentliche Stile. Das ist auf jeden Fall ein bisschen beschissen, und keine Lösung vermeidet ein Problem: Gewicht! ! !

//content.vue
<template>
  <p class="content">
    <p class="title"></p>
    <!-- v-button假设是上面定义的组件 -->
    <v-button></v-button>
  </p>
</template>
...
<style scoped>
  .content{
    width: 1200px;
    margin: 0 auto;
  }
</style>
<style>
  .content .button{
    border-raduis: 5px;
  }
</style>
Nach dem Login kopieren
Ist das verordnungskonform? Es scheint, dass ich nicht gesehen habe, dass ich es nicht so schreiben kann, und es hat tatsächlich Wirkung gezeigt. . . Dies erhöht jedoch die Komplexität des Denkens, was ein wenig beunruhigend ist.

Zusammenfassung der bereichsbezogenen Rendering-Regeln

Zusammenfassung der drei bereichsbezogenen Rendering-Regeln

  1. Fügen Sie ein Nicht-Duplikat zum hinzu HTML-DOM-Knotendatenattribut (Formular: data-v-2311c06a), um seine Einzigartigkeit anzuzeigen

  2. Fügen Sie am Ende jedes CSS-Selektors (kompilierte und generierte CSS-Anweisung) einen Datenattributselektor der aktuellen Komponente (z. B. [data-v-2311c06a]) hinzu, um den Stil zu privatisieren

  3. Wenn die Komponente andere Komponenten enthält, wird nur das Datenattribut der aktuellen Komponente zum äußersten Tag anderer Komponenten hinzugefügt

Lösung

Für die referenzierte Drittanbieter-Bibliothek können wir nichts ändern, wenn die andere Partei Scoped verwendet. Wenn wir ihren Stil wirklich ändern müssen, können wir den Stil in der Komponente am besten ohne Scoped ändern. oder global Den Stil direkt zu ändern ist sehr unhöflich!

Für die Komponenten, die Sie pflegen, müssen Sie klar darüber nachdenken, ob der Stil der Komponente allen Situationen gerecht wird. Wenn es wirklich notwendig ist, es hinzuzufügen, wird es zweifellos die Arbeit der Entwickler erhöhen, die diese Komponente verwenden!

Wenn Sie eine bessere Lösung für dieses Problem haben, sagen Sie es mir bitte!

Interessante Fakten

Bei der Verwendung von Scoped müssen Sie bei dieser Funktion von Scoped vorsichtig sein, also habe ich es angesprochen ein Problem Die ursprüngliche Absicht des Scoped-Designs besteht nicht darin, zuzulassen, dass der Stil der aktuellen Komponente aufgrund des Designs den Stil eines anderen Ortes verändert. Daher wurde dieses Problem natürlich geschlossen

Das Obige habe ich für alle zusammengestellt und hoffe, dass es in Zukunft für alle hilfreich sein wird.

Verwandte Artikel:

Über Kryptomodul-Sicherheitskenntnisse in Nodejs (ausführliches Tutorial)

So implementieren Sie ein unscharfes Dropdown-Feld in Angular Query-Funktion

So implementieren Sie eine Anmeldung in js, die eine gleitende Überprüfung erfordert

Das obige ist der detaillierte Inhalt vonSo verwenden Sie das Gültigkeitsbereichsattribut von style 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ßer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate 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 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.

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.

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 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