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>
相关推荐
冰冻果冻11 分钟前
vue--制作随意滑动的相册
前端·javascript·vue.js
GISer_Jing31 分钟前
前端测试工具(Jest与Mock)
前端·测试工具
licy__42 分钟前
HTML 元素类型介绍
前端·css·html
一雨方知深秋1 小时前
WEB APIS(DOM对象,操作元素内容,属性,表单属性,自定义属性,定时器)
开发语言·前端·javascript
三金121381 小时前
整站使用Vue(工程化)
前端·javascript·vue.js
爪哇学长1 小时前
打造极致网页体验:HTML与CSS高级实战秘籍
前端·css·html
程序猴老王2 小时前
el-select 和el-tree二次封装
前端·vue.js·elementui
blzlh2 小时前
手把手教你做网易云H5页面,进大厂后干的第一件事
前端·javascript·css
贩卖纯净水.3 小时前
网站部署及CSS剩余模块
前端·css
Justinc.3 小时前
CSS3_BFC(十二)
前端·css·css3