Vue组件

组件介绍

概念:组件就是局部功能界⾯

作⽤:根据业务需求⾃定义组件,并实现组件复⽤

建议:组件在起名字的时候建议采⽤:公司-组件名的⽅法来命名,⽐如el-alert,如果是⾃⼰开发的组件,建议⽤:my-login这样格式来命名

注意:当使⽤ kebab-case (短横线分隔命名) 定义⼀个组件时,你也必须在引⽤这个⾃定义元素时使⽤kebab-case,例如 。当使⽤ PascalCase (⾸字⺟⼤写命名) 定义⼀个组件时,你在引⽤这个⾃定义元素时两种命名法都可以使⽤。也就是说 和 都是可接受的。注

意,尽管如此,直接在 DOM (即⾮字符串的模板) 中使⽤时只有 kebab-case 是有效的。

使⽤步骤:

1. ⾃定义组件

2. 在被使⽤的地⽅引⼊并注册到components中

3. ⽤⾃定义标签,标签名字就是定义的组件名字

示例:

Vue 复制代码
    <template>

<div>

<header-area></header-area>

</div>

</template>

<script>

import HeaderArea from './components/HeaderArea.vue';

export default {

// 定义属性

data() {

return {

}

},

components: { HeaderArea },

methods: {

},

}

</script>

<style lang='scss' scoped></style>
Vue 复制代码
    <template>

<div>

<h1>这是头部</h1>

</div>

</template>

<script>

export default {

// 定义属性

data() {

return {

}

},

methods: {

},

}

</script>

<style>

</style>

⽗组件向⼦组件传值

作⽤:⽗组件向⼦组件传递参数

步骤:

1. 定义⼦组件

2. ⽗组件中使⽤⼦组件

3. 在引⽤⼦组件的时候将参数绑定在⼀个⾃定义的属性上去

4. ⼦组件⾥接收传值

示例:

⽗组件

Vue 复制代码
    <template>

<div>

<header-area :title="title"></header-area>

</div>

</template>

<script>

import HeaderArea from './components/HeaderArea.vue';

export default {

// 定义属性

data() {

return {

title: "⾸⻚"

}

},

components: { HeaderArea },

methods: {

},

}

</script>

<style lang='scss' scoped></style>

⼦组件

Vue 复制代码
    <template>

<div>

<h1>{{ title }}</h1>

</div>

</template>

<script>

export default {

// 定义属性

data() {

return {

}

},

props: ['title'],

// 另⼀种写法

// props: {

// title: {

// type: String,

// default: '默认标题',

// // required: true

// }

// },

methods: {

},

}

</script>

<style></style>

Tips:

● ⼦组件⾥设置接收哪些属性的传值(可⽤数组形式设置,也可以⽤对象形式设置,前⾯必须写的是props)

● 在使⽤对象形式设置时,可以设置type、default、required等

● 在使⽤对象形式设置时,参数值类型(即type)不是只能写⼀个,它可以写很多个,只需要⽤数组写即可

● ⼀般required和default只写⼀个,因为如果default存在,那么required设置true就没有意义了

● 如果⽗组件调⽤⼦组件时定义的属性格式是:kebab-case的类型,那么⼦组件接收的时候要写成驼峰格式接收与使⽤

⼦组件向⽗组件传值

作⽤:⼦组件向⽗组件传值

步骤:

1. ⼦组件使⽤$emit来触发⽗组件的某个⽅法

2. ⼦组件触发的这个⽅法在⽗组件引⼊⼦组件时候要以⾃定义事件的⽅式绑定

3. ⽗组件中定义上⾯⾃定义事件触发的函数,执⾏逻辑

示例:

⼦组件

Vue 复制代码
    <template>

<div>

<h1>这是⾸⻚</h1>

<button @click="tellMsg">发送消息</button>

</div>

</template>

<script>

export default {

// 定义属性

data() {

return {

}

},

emits: ['getMsg'],

methods: {

tellMsg() {

this.$emit("getMsg", "我被点击了")

}

},

}

</script>

<style></style>

⽗组件

Vue 复制代码
    <template>

<div>

<header-area @get-msg="onGetMsg"></header-area>

</div>

</template>

<script>

import HeaderArea from './components/HeaderArea.vue';

export default {

// 定义属性

data() {

return {

title: "⾸⻚"

}

},

components: { HeaderArea },

methods: {

onGetMsg(msg) {

alert(msg)

}

},

}

</script>

<style lang='scss' scoped></style>
相关推荐
吕彬-前端16 分钟前
使用vite+react+ts+Ant Design开发后台管理项目(五)
前端·javascript·react.js
学前端的小朱19 分钟前
Redux的简介及其在React中的应用
前端·javascript·react.js·redux·store
guai_guai_guai28 分钟前
uniapp
前端·javascript·vue.js·uni-app
bysking1 小时前
【前端-组件】定义行分组的表格表单实现-bysking
前端·react.js
王哲晓2 小时前
第三十章 章节练习商品列表组件封装
前端·javascript·vue.js
fg_4112 小时前
无网络安装ionic和运行
前端·npm
理想不理想v2 小时前
‌Vue 3相比Vue 2的主要改进‌?
前端·javascript·vue.js·面试
酷酷的阿云2 小时前
不用ECharts!从0到1徒手撸一个Vue3柱状图
前端·javascript·vue.js
微信:137971205872 小时前
web端手机录音
前端
齐 飞2 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb