菜单
×
   ❮   
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 传递属性

组件可以接受未声明为 prop 的属性,这些属性将简单地传递到组件的根元素。

通过传递属性,您可以在父组件中更好地概览组件的创建,并且可以简化我们的代码,因为我们不必将属性声明为 prop。

通常用于传递的属性是 classstylev-on

传递属性

例如,从父组件控制组件的样式会比将样式隐藏在组件内部要好。

让我们创建一个新的示例,一个 Vue 中的基本待办事项列表,看看 style 属性如何传递到代表待办事项的组件。

因此,我们的 App.vue 应包含待办事项列表,一个 <input> 元素和一个 <button> 来添加新的待办事项。每个列表项都是一个 <todo-item /> 组件。

App.vue:

<template>
  <h3>Todo List</h3>  
  <ul>
    <todo-item
      v-for="x in items"
      :key="x"
      :item-name="x"
    />
  </ul>
  <input v-model="newItem">
  <button @click="addItem">Add</button>
</template>

<script>
  export default {
    data() {
      return {
        newItem: '',
        items: ['Buy apples','Make pizza','Mow the lawn']
      };
    },
    methods: {
      addItem() {
        this.items.push(this.newItem),
        this.newItem = '';
      }
    }
  }
</script>

TodoItem.vue 仅通过 prop 接收待办事项的描述

TodoItem.vue:

<template>
  <li>{{ itemName }}</li>
</template>

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

为了正确构建我们的应用程序,我们还需要在 main.js 中进行正确的设置

main.js:

import { createApp } from 'vue'
  
import App from './App.vue'
import TodoItem from './components/TodoItem.vue'

const app = createApp(App)
app.component('todo-item', TodoItem)
app.mount('#app')

为了理解本节的重点,即属性可以传递到我们组件 <template> 中的根元素,我们可以为列表项设置一些来自 App.vue 的样式

示例

我们为组件内的 <li> 元素设置样式,来自 App.vue

<template>
  <h3>Todo List</h3>
  <ul>
    <todo-item
      v-for="x in items"
      :key="x"
      :item-name="x"
      style="background-color: lightgreen;"
    />
  </ul>
  <input v-model="newItem">
  <button @click="addItem">Add</button>
</template>
运行示例 »

要确认 style 属性实际上已经传递,您可以在浏览器中右键单击待办事项列表中的 <li> 元素,选择“检查”,您就可以看到 style 属性现在已添加到 <li> 元素上了


合并 'class' 和 'style' 属性

如果 'class' 或 'style' 属性已设置,并且 'class' 或 'style' 属性也来自父组件作为传递属性,则这些属性将被合并。

示例

除了父组件的现有样式外,我们还为 TodoItem.vue 组件内的 <li> 元素添加了 margin

<template>
  <li style="margin: 5px 0;">{{ itemName }}</li>
</template>

<script>
  export default {
    props: ['itemName']
  }
</script>
运行示例 »

如果在浏览器中右键单击 <li> 元素,您可以看到属性已被合并。Margin 直接设置在组件内的 <li> 元素上,并与从父组件传递的 background-color 合并


$attrs

如果组件的根级别有多个元素,就不清楚属性应该传递到哪个元素。

要定义哪个根元素获取传递的属性,我们可以使用内置的 $attrs 对象来标记该元素,如下所示

示例

TodoItem.vue:

<template>
  <div class="pinkBall"></div>
  <li v-bind="$attrs">{{ itemName }}</li>
  <div class="pinkBall"></div>
</template>
运行示例 »

Vue 练习

通过练习来测试自己

练习

将 'fish-type' 组件的根元素设置为属于 'blue' CSS 类(创建传递属性)。

<fish-type  />

开始练习



×

联系销售

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

报告错误

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

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

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