Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah Vue melaksanakan sarang komponen dan pengurusan gaya komponen?

Bagaimanakah Vue melaksanakan sarang komponen dan pengurusan gaya komponen?

王林
王林asal
2023-06-27 15:33:102370semak imbas

Vue.js ialah rangka kerja JavaScript ringan yang menampilkan paparan pengemaskinian terdorong data dan responsif. Konsep teras Vue.js ialah komponenisasi Komponen boleh berupa butang, borang, kotak modal, dsb., yang boleh digabungkan secara bebas dan dibahagikan kepada komponen yang lebih kecil. Sarang komponen dan pengurusan gaya Vue.js ialah titik pengetahuan penting dalam pembangunan komponen Artikel ini akan menerangkan secara terperinci cara melaksanakan sarang komponen dan pengurusan gaya dalam Vue.

Sarang komponen

Sarang komponen merujuk kepada meletakkan satu komponen di dalam komponen lain untuk membentuk hubungan komponen induk-anak, menghantar data kepada komponen anak melalui komponen induk, dan komponen anak juga boleh menghantar data kepada komponen induk, dengan itu merealisasikan integrasi komponen komunikasi antara. Vue.js sangat mudah untuk melaksanakan sarang komponen Anda hanya perlu memperkenalkan templat komponen anak di dalam komponen induk. Berikut ialah contoh mudah:

<template>
  <div>
    <h1>父组件</h1>
    <child-component></child-component>
  </div>
</template>

<script>
import childComponent from './childComponent.vue'

export default {
  components: {
    'child-component': childComponent
  }
}
</script>

Kod di atas ialah komponen induk, perkenalkan komponen anak melalui import, dan kemudian daftarkan komponen anak dalam komponen, anda boleh tambahkannya pada komponen induk Gunakan subkomponen dalam komponen. Sarang komponen boleh dicapai dengan memperkenalkan templat komponen kanak-kanak dalam komponen induk menggunakan b3215e77310eda35dbfb7341c2d5fe4fa2cb263643d1e97505a3a8af409824aa. import 引入子组件,然后在 components 中注册子组件,即可在父组件中使用子组件。在父组件中用 6520631531c208a38051e59cee36c27853b801b01e70268453ed301cb998e90c 的方式引入子组件的模板,即可实现组件嵌套。

在子组件中,我们通常从父组件获取数据。Vue.js 中父子组件的数据传递主要通过 props$emit 两种方式实现。props 表示父组件向子组件传递数据,子组件通过接收 props 来获取父组件传递的数据。下面是一个简单的 props 例子:

<template>
  <div>
    <h2>子组件</h2>
    <p>父组件的名字是:{{ name }}</p>
  </div>
</template>

<script>
export default {
  props: ['name']
}
</script>

上面的代码是一个子组件,通过 props 定义了一个名为 name 的属性,父组件向子组件传递数据时通过 name 属性进行传递。在子组件的模板中,可以通过 {{ name }} 的方式获取父组件传递的数据。

在父组件中向子组件传递数据时,可以通过 v-bind 指令传递数据。如下所示:

<template>
  <div>
    <h1>父组件</h1>
    <child-component :name="fatherName"></child-component>
  </div>
</template>

<script>
import childComponent from './childComponent.vue'

export default {
  data () {
    return {
      fatherName: '张三'
    }
  },
  components: {
    'child-component': childComponent
  }
}
</script>

在父组件中,我们定义了一个名为 fatherName 的变量,用于存储父组件的名字。在子组件中,我们通过 props 来接收 fatherName

组件样式管理

组件样式管理是指在 Vue.js 中如何管理组件的样式,保证每个组件的样式不会互相影响,且易于维护。Vue.js 提供了两种方式来管理组件样式:作用域样式和 CSS Modules。

作用域样式

作用域样式是指在组件中使用 scoped 属性定义样式,使得该组件样式只对当前组件有效。例如:

<template>
  <div class="component">
    <h2 class="title">标题</h2>
  </div>
</template>

<style scoped>
.component {
  background-color: #f5f5f5;
  padding: 20px;
  border-radius: 5px;
}

.title {
  color: #333;
  font-size: 18px;
  margin-bottom: 10px;
}
</style>

在这个组件中,我们在样式标签上加上了 scoped 属性,即 style scoped。这样定义的样式只对当前的组件有效,不会影响其他组件或全局样式。

使用作用域样式有一个缺点:不支持深度选择器。在组件中,如果要使用深度选择器,必须在选择器前加上 /deep/ 或者 ,如下所示:

<template>
  <div class="component">
    <h2 class="title">标题</h2>
    <div class="sub-component">
      <span class="sub-title">子标题</span>
    </div>
  </div>
</template>

<style scoped>
.component {
  /deep/ .sub-component {
    background-color: #f1f1f1;
  }
  >>> .sub-title {
    color: red;
  }
}
</style>

上面的代码中,我们在 .component 的样式定义中使用了 /deep/ .sub-component,在 .sub-title 的样式定义中使用了 。这样就可以在作用域样式中定义深度选择器了。

CSS Modules

CSS Modules 是一种模块化 CSS 的解决方案,它可以将 CSS 模块化并命名,确保每个组件的样式都是独立的。Vue.js 提供了对 CSS Modules 的支持,我们可以在每个组件中使用独立的 CSS Module。

首先,我们需要安装 css-loaderstyle-loader,并在 Webpack 配置文件中添加关于 CSS Modules 的配置:

// webpack.conf.js
module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /.css$/,
        loader: 'style-loader!css-loader?modules'
      },
      {
        test: /.vue$/,
        loader: 'vue-loader',
        options: {
          cssModules: {
            localIdentName: '[name]-[hash]',
            camelCase: true
          }
        }
      }
    ]
  }
  // ...
}

上面的代码中,我们在 css-loader 的配置中加上了 modules,表示启用 CSS Modules。在 vue-loader 的配置中加上了 cssModules 属性,表示在 Vue.js 的单文件组件中启用 CSS Modules。

在单文件组件中,我们可以通过 scoped 属性指定 CSS Module 名称。

<template>
  <div class="component">
    <h2 class="title">标题</h2>
  </div>
</template>

<style module>
.component {
  background-color: #f5f5f5;
  padding: 20px;
  border-radius: 5px;
}

.title {
  color: #333;
  font-size: 18px;
  margin-bottom: 10px;
}
</style>

上面的代码中,我们在 style 标签上加上了 module 属性,表示这是一个 CSS Module。在 CSS 中,我们可以采用传统的方式定义样式,不需要使用作用域样式或者深度选择器。

在组件中引入 CSS Module 时,需要使用 $style 对象,如下所示:

<template>
  <div class="component">
    <h2 class="{{$style.title}}">标题</h2>
  </div>
</template>

<style module>
.component {
  background-color: #f5f5f5;
  padding: 20px;
  border-radius: 5px;
}

.title {
  color: #333;
  font-size: 18px;
  margin-bottom: 10px;
}
</style>

上面的代码中,我们使用 $style.title 引用了本组件中定义的 title

Dalam komponen anak, biasanya kami mendapat data daripada komponen induk. Pemindahan data antara komponen induk dan anak dalam Vue.js dilaksanakan terutamanya melalui dua kaedah: props dan $emit. props bermaksud komponen induk menghantar data kepada komponen anak dan komponen anak memperoleh data yang diluluskan oleh komponen induk dengan menerima props. Berikut ialah contoh props mudah:

rrreee

Kod di atas ialah subkomponen yang mentakrifkan sifat bernama name melalui props , apabila komponen induk menghantar data kepada komponen anak, ia menghantarnya melalui atribut name. Dalam templat komponen anak, anda boleh mendapatkan data yang diluluskan oleh komponen induk melalui {{ name }}. 🎜🎜Apabila menghantar data kepada komponen anak dalam komponen induk, anda boleh menghantar data melalui arahan v-bind. Seperti yang ditunjukkan di bawah: 🎜rrreee🎜Dalam komponen induk, kami mentakrifkan pembolehubah bernama fatherName untuk menyimpan nama komponen induk. Dalam komponen anak, kami menerima nama bapa melalui props. 🎜🎜Pengurusan gaya komponen🎜🎜Pengurusan gaya komponen merujuk kepada cara mengurus gaya komponen dalam Vue.js untuk memastikan gaya setiap komponen tidak menjejaskan satu sama lain dan mudah dikekalkan. Vue.js menyediakan dua cara untuk mengurus gaya komponen: gaya skop dan Modul CSS. 🎜

Gaya skop

🎜Gaya skop merujuk kepada penggunaan atribut scoped untuk menentukan gaya dalam komponen, supaya gaya komponen hanya sah untuk komponen semasa. Contohnya: 🎜rrreee🎜Dalam komponen ini, kami menambahkan atribut scoped pada teg gaya, iaitu, style scoped. Gaya yang ditakrifkan dengan cara ini hanya sah untuk komponen semasa dan tidak akan menjejaskan komponen lain atau gaya global. 🎜🎜Terdapat satu kelemahan untuk menggunakan gaya berskop: pemilih dalam tidak disokong. Dalam komponen, jika anda ingin menggunakan pemilih dalam, anda mesti menambah /deep/ atau sebelum pemilih, seperti ditunjukkan di bawah: 🎜rrreee 🎜 Dalam kod di atas, kami menggunakan /deep/ .sub-component dalam takrif gaya .component dan dalam .sub-title > digunakan dalam definisi gaya. Ini membolehkan anda menentukan pemilih kedalaman dalam gaya skop. 🎜

Modul CSS

🎜Modul CSS ialah penyelesaian CSS modular yang boleh memodulasi dan menamakan CSS untuk memastikan gaya setiap komponen adalah bebas. Vue.js menyediakan sokongan untuk Modul CSS dan kami boleh menggunakan Modul CSS bebas dalam setiap komponen. 🎜🎜Mula-mula, kita perlu memasang css-loader dan style-loader, dan menambah konfigurasi tentang Modul CSS dalam fail konfigurasi Webpack: 🎜rrreee🎜Dalam kod di atas, Kami menambahkan modul pada konfigurasi css-loader untuk mendayakan Modul CSS. Atribut cssModules ditambahkan pada konfigurasi vue-loader, yang bermaksud bahawa Modul CSS didayakan dalam komponen fail tunggal Vue.js. 🎜🎜Dalam komponen fail tunggal, kami boleh menentukan nama Modul CSS melalui atribut scoped. 🎜rrreee🎜Dalam kod di atas, kami menambahkan atribut module pada teg style, yang menunjukkan bahawa ini ialah Modul CSS. Dalam CSS, kita boleh menentukan gaya dengan cara tradisional tanpa menggunakan gaya berskop atau pemilih dalam. 🎜🎜Apabila memperkenalkan Modul CSS ke dalam komponen, anda perlu menggunakan objek $style, seperti yang ditunjukkan di bawah: 🎜rrreee🎜Dalam kod di atas, kami menggunakan $style.title untuk merujuk Gaya title yang ditakrifkan dalam komponen ini. 🎜🎜Ringkasan: Vue.js menyediakan dua cara untuk mengurus gaya komponen: gaya skop dan Modul CSS. Gaya berskop sesuai untuk gaya ringkas, manakala Modul CSS sesuai untuk aplikasi berkomponen, yang memodulasi CSS dan memastikan gaya setiap komponen adalah bebas. 🎜

Atas ialah kandungan terperinci Bagaimanakah Vue melaksanakan sarang komponen dan pengurusan gaya komponen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn