Vue的核心思想是数据驱动视图和组件化,组件是Vue很重要的功能模块,作用是拆分代码,代码复用等。
给多选项切换的栗子添加动画
运行效果
组件传值一般分为父组件向子组件传值,父组件向子组件传递方法以及子组件向父组件传值。
举个栗子
需求是将vm实例中的data值msg属性传给子组件com1
两步:
使用v-bind绑定自定义属性,属性值就是传递的数据。
使用props接收组件自定义属性中的属性
子组件接收数据的方法有两种,一种就是上面这种用的数组,一种是对象形式。
举个栗子:
一样的效果。(需要注意数据类型)
举个栗子:在父组件中定义show方法,在子组件中定义按钮,单击子组件的按钮,调用父组件中定义的方法。
要实现父组件向子组件中传递方法,同样两步:
运行效果
把子组件的数据传递给父组件,两步:
举个栗子:
子组件向父组件传递列表,父组件渲染列表
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Documenttitle>
head>
<body>
<div id="main" v-cloak>
<com1 @sendfn="show">com1>
<li v-for="(item,i) in list" :key="item.id">
{{item.id}}---{{item.name}}
li>
div>
<template id="temp">
<div>
<h1 @click="c_show">子组件h1>
div>
template>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script>
var com1 = {
template: '#temp',
data() {
return {
c_msg : '我是子组件里面的内容',
c_list : [
{
id : 1,
name : 'Vue'
},{
id : 2,
name : 'Java'
},{
id : 3,
name : 'Python'
}
]
}
},
methods: {
//这里是子组件com1的方法
c_show(){
this.$emit('sendfn',this.c_list)
}
}
}
var vm = new Vue({
el: '#main',
data: {
msg: "Hello world",
list : []
},
methods: {
show(data){
console.log("我是父组件中的方法" + data)
//把数据挂载到父组件的data中
this.list = data
console.log(this.list)
}
},
//私有组件
components: {
com1
}
})
script>
body>
html>
运行效果