菜单
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Vue 教程

Vue 首页 Vue Intro Vue Directives Vue v-bind Vue v-if Vue v-show Vue v-for Vue Events Vue v-on Vue Methods Vue Event Modifiers Vue Forms Vue v-model Vue CSS Binding Vue Computed Properties Vue Watchers Vue Templates

Scaling Up

Vue:为什么、如何以及设置 Vue:第一个 SFC 页面 Vue 组件 Vue Props Vue v-for 组件 Vue $emit() Vue 传递属性 Vue 作用域样式 Vue 本地组件 Vue 插槽 Vue v-slot Vue 作用域插槽 Vue 动态组件 Vue Teleport Vue HTTP 请求 Vue 模板引用 Vue 生命周期钩子 Vue Provide/Inject Vue 路由 Vue 表单输入 Vue 动画 Vue v-for 动画 Vue 构建 Vue Composition API

Vue Reference

Vue Built-in Attributes Vue Built-in Components Vue Built-in Elements Vue Component Instance Vue Directives Vue Instance Options Vue Lifecycle Hooks

Vue 示例

Vue Examples Vue Exercises Vue Quiz Vue Server Vue Certificate

Vue 组件

Vue 中的组件可以将我们的网页分解成易于处理的小块。

我们可以独立于网页的其余部分来使用 Vue 组件,组件拥有自己的内容和逻辑。

一个网页通常由许多 Vue 组件组成。

什么是组件?

组件是可重用的、自包含的代码块,它们封装了用户界面的特定部分,因此我们可以构建可扩展且易于维护的 Vue 应用程序。

我们可以自己创建 Vue 组件,也可以使用稍后会学到的内置组件,例如 <Teleport><KeepAlive>。在这里,我们将专注于我们自己创建的组件。


创建组件

Vue 的组件是一个非常强大的工具,因为它能让我们的网页更具可扩展性,并且使大型项目更容易处理。

让我们创建一个组件并将其添加到我们的项目中。

  1. src 文件夹内创建一个名为 components 的新文件夹。

  2. components 文件夹内,创建一个名为 FoodItem.vue 的新文件。组件通常以 PascalCase 命名约定命名,不带空格,其中每个新单词都以大写字母开头,包括第一个单词。

  3. 确保 FoodItem.vue 文件如下所示:

FoodItem.vue 组件内的代码

<template>
  <div>
    <h2>{{ name }}</h2>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      name: 'Apples',
      message: 'I like apples'
    }
  }
};
</script>

<style></style>

如上例所示,组件也像我们的主 App.vue 文件一样,由 <template><script><style> 标签组成。


添加组件

请注意,上面示例中的 <script> 标签以 export default 开头。这意味着包含数据属性的对象可以在另一个文件中接收或导入。我们将使用此功能,通过在 main.js 文件中导入 FoodItem.vue 组件来将其集成到我们现有的项目中。

首先,在您的原始 main.js 文件中将最后一行重写为两行:

main.js:

import { createApp } from 'vue'

import App from './App.vue'

const app = createApp(App)
app.mount('#app')

现在,通过在 main.js 文件中插入第 4 行和第 7 行来添加 FoodItem.vue 组件:

main.js:

import { createApp } from 'vue'

import App from './App.vue'
import FoodItem from './components/FoodItem.vue'

const app = createApp(App)
app.component('food-item', FoodItem)
app.mount('#app')

在第 7 行,添加了该组件,以便我们可以在 App.vue 文件的 <template> 标签中使用它,作为自定义标签 <food-item/>,如下所示:

App.vue:

<template>
  <h1>Food</h1>
  <food-item/>
  <food-item/>
  <food-item/>
</template>

<script></script>

<style></style>

另外,让我们在 App.vue 文件的 <style> 标签中添加一些样式。确保开发服务器正在运行,并查看结果。

示例

App.vue:

<template>
  <h1>Food</h1>
  <food-item/>
  <food-item/>
  <food-item/>
</template>

<script></script>

<style>
  #app > div {
    border: dashed black 1px;
    display: inline-block;
    margin: 10px;
    padding: 10px;
    background-color: lightgreen;
  }
</style>
运行示例 »

开发模式:在处理 Vue 项目时,通过在终端中运行以下命令,始终将项目置于开发模式非常有用:

npm run dev

单独的组件

Vue 中处理组件时一个非常有用且强大的属性是,我们可以让它们独立工作,而无需像使用纯 JavaScript 那样标记具有唯一 ID 的元素。Vue 会自动处理,将每个组件视为独立的。

让我们让 <div> 元素在被点击时进行计数。

我们添加到主应用程序文件 App.vue 的唯一内容是 CSS,以便在悬停时将光标显示为指向的手形,暗示存在某种点击功能。

添加到 App.vue<style> 标签的 CSS 代码:

#app > div:hover {
  cursor: pointer;
}

在我们的组件文件 FoodItem.vue 中,我们必须添加一个名为 count 的数据属性,为 <div> 元素添加一个点击监听器,添加一个在点击时运行以增加计数器的函数,以及使用文本插值 {{}} 来显示计数。

示例

FoodItem.vue:

<template>
  <div v-on:click="countClicks">
    <h2>{{ name }}</h2>  
    <p>{{ message }}</p>
    <p id="red">You have clicked me {{ clicks }} times.</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      name: 'Apples',
      message: 'I like apples',
      clicks: 0
    }
  },
  methods: {
    countClicks() {
      this.clicks++;
    }
  }
}
</script>

<style>
  #red {
    font-weight: bold ;
    color: rgb(144, 12, 12);
  }
</style>
运行示例 »

我们不必定义唯一的 ID 或执行任何额外工作,Vue 就会自动为每个 <div> 元素独立处理计数,Vue 就会自动完成。

但是,除了不同的计数器值之外,<div> 元素的内容仍然相同。在下一页中,我们将了解更多关于组件的知识,以便以更有意义的方式使用组件。例如,在每个 <div> 元素中显示不同种类的食物会更有意义。


Vue 练习

通过练习来测试自己

练习

main.js 中下面的行将一个组件添加到我们的 Vue 项目中:

app.component('fish-type', FishType)

如何将此组件添加到 App.vue 中?

<template>
  <h1>Fish</h1>
  
</template>

开始练习



×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持