父传子:props down 事件向下传
子传父: event up 事件向上传
1.父组件给子组件传值方法:
第一步:用import引入子组件
第二步:在components中注入子组件
第三步:在父组件中定义一个指令:name=“aaa” (name名称需要和子组件中的props保持一致,aaa是要传递给子组件的数据,请注意这里:name是v-bind动态绑定数据,,aaa需要在data里定义且定义的是字符串,否则在子组件接收到的参数就是undefined ,也可以直接写静态数据,name=“aaa”,这里的静态aaa不需要在data里定义)
第四步:在子组件中定义props属性,name的type可以自定义类型(但是必须和父组件中的数据类型一致,否则会报错),default是默认值。 子组件里可以这样写,props: [‘name’]
2.子组件给父组件传值的方法:
第一步:在子组件绑定一个click事件,在事件里写上 this.emit里的方法名,cName为此方法要执行的函数
第三步:定义方法childFn(必须和子组件中方法名一致),parentFn定义可随意。
【注意】在子组件里还可以这么写, this.$parent.cName(‘peng’),这么写表明不管父组件里有没有方法,子组件都会向父组件发送这个值
3.在子组件里新增一个div,并在这个div里写上{{age}},再在向父组件emit的changeName事件里打印this.age,
在父组件写上以下代码:
<web-header ref=“webHeader” :name=“aaa” @changeName=“cName”>
export default {
name: ‘shakeBox’,
components: { WebHeader },
data () {
return {
aaa: ‘zhouwen’
}
},
methods: {
cName (data) {
console.log(‘data’, data)
this.aaa = data
},
chuanzijian () {
this.
refs.zi.setAttribute(‘age’, 18)
},
}
}
在子组件写以下代码:
111
<div @click=“test”>提交
age{{age}}
export default {
props: {
name: {
type: String,
default: null
}
},
watch: {
name (value) {
console.log(‘name1’, value)
}
},
data () {
return {
age: 0
}
},
name: ‘web-header’,
mounted () {
console.log(‘this.name’, this.name)
},
methods: {
test () {
// this.parent.cName(‘peng’)
},
changeName (data) {
this.age = data
console.log(‘this.age’, this.age)
}
}
}4.在父组件里想打开子组件的弹框,可以这么做:
在父组件引入子组件,并在引用子组件的地方加上 ref属性,具体代码如下
parent
<el-button @click=“openDialog”>
点击打开子组件弹框