父组件向子组件传值
props
1.首先在子组件上定义一个引用,用来引用父组件的值(类似于动态绑定,绑定父组件中的值,然后通过props传给子组件)
2.在子组件中加入props
可以看看这篇文章,来自于官网
https://cn.vuejs.org/v2/guide/components-props.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="lib/vue-2.4.0.js"></script>
</head>
<body>
<div id="app">
<com1 v-bind:parentmsg="msg" v-on:func="show" ref="com1"></com1>
<input type="button" value="获取子组件" @click="getSon">
</div>
<script>
com1 = {
template:'<h3 @click="change">这是父组件{{parentmsg}}</h3>',
props:['parentmsg'],
data(){
return{
title:'123'
}
},
methods:{
change(){
console.log(this.parentmsg);
this.$emit('func');
}
}
};
var vm = new Vue({
el:'#app',
data:{
msg:'父组件'
},
methods:{
show(){
console.log("调用父组件方法");
},
getSon(){
console.log(this.$refs.com1.parentmsg);
this.$refs.com1.change();
}
},
components:{
com1
}
})
</script>
</body>
</html>
可以看出子组件com1上有一个v-bind:parentmsg="msg",也就是子组件定义parentmsg来引用父组件msg
然后在com1子组件中加入props,这样子组件就可以使用parentmsg。利用这个我们做一个小实例。需求:我们需要把父组件中的movies传递给com1子组件显示,怎么做呢?可以使用props
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script>
</head>
<body>
<div id="app">
<com1 v-bind:parentmovies="movies"></com1>
</div>
<!--v-for不能使用在根元素上-->
<template id="com1">
<div>
<div v-for="movie in parentmovies">{{movie}}</div>
</div>
</template>
<script>
const com1 = {
template:'#com1',
props:['parentmovies'],
data(){
return{
}
},
methods:{
}
};
var vm = new Vue({
el:'#app',
data:{
movies:['海王','海泽王','李白']
},
methods:{
},
components:{
com1
}
})
</script>
</body>
</html>
父组件向子组件传递事件
同样先在com1子组件中定义v-on:func="show"来引用父组件中的show方法
然后在子组件的点击事件中通过this.$emit('func');来调用父组件的方法
使用ref,通过在组件上定义一个ref,这样可以在任何组件中通过this.$refs.定义的ref名即可获得组件引用,通过这个引用可以获取该组件的任何属性,也就是data和调用方法