day05

组件通信

父传子

特点

总结:1.父传子:传递的是基础数据类型  给父组件中的子组件绑定属性,此时属性的值在父组件中已经定义,子组件需要通过porps接收,要用数组接收  在子组件中直接渲染接收到的值即可

2.父传子:子修改父组件传递的值报错,如果解决,把父组件传递过来的值变为自己的属性,直接修改自己属性即可。后果:父组件修改不会影响自己的数据

3.父传子:父变,子变,子变,父变,需要在父组件中定义对象,传递给子组件的就是对象的方式,子组件正常接收即可
<v-one :title='大奔'></v-one>
//v-one为子组件模板
//子组件中
props:['title']

子传父

特点

子组件通过this.$emit触发方法

//子组件中
<button @click = 'send'>点击</button>
methods:{
send(){
this.$emit('give',5)
}
}

//父组件   v-two为子组件模板
<v-two @give = 'show'></v-two>
methods:{
show(e){
console.log(e);
}
}

非父子

特点

首先创造关系, main.js->Vue.prototype.Event=new Vue()

总结:发送数据用 $emit 需要触发条件 接收数据用$ona.Vue

Vue.prototype.Event = new Vue()
this,Event.$emit('方法',参数)
this.Event.$on('方法',(e)=>{
console.log(e)=>e为参数
})

is

特点

1.解决标签的固定搭配问题

2.动态组件。

<ul>
<li :is='div'>这是一个li<div>这是一个div</div></li>
//直接显示div
<ul>

slot

特点

1.无名插槽
在子组件中添加<slot></slot>
在slot.vue
<v-one>
<div>我就是插入到one组件中的内容1111</div>
<div>我就是插入到one组件中的内容22222</div>
</v-one>
在one.vue
<!-- 无名插槽 -->
<slot></slot>
one
<slot></slot>
2.具名插槽
在slot.vue中
<v-two>
<div slot="aa">白日依山尽</div>
<div slot="bb">黄河入海流</div>
<div slot="cc">欲穷千里目</div>
<div slot="dd">更上一层楼</div>
<p>我是新增加的</p>
</v-two>
在two.vue中
<div>
    <slot name='aa'></slot>
    <slot name='bb'></slot>
    two
    <slot name='cc'></slot>
    <slot name='dd'></slot>
    <slot></slot>
</div>

ref

1.ref 操作普通元素  就是获取到的dom元素
2.ref 操作的组件   获取的就是组件的数据和方法
3.使用ref 需要通过this.$refs来获取

在ref.vue中
<template>
<div>
   <div class="box" ref='box'></div>
   <v-one ref='one'></v-one>
  这是从one组件拿回来的数据{{myMsg}}
</div>
</template>
<script>
import vOne from './one'
export default {
components:{
   vOne
},
data () {
return {
    myMsg:''
}
},
methods:{
},
mounted(){
   // 总结:1.对于普通元 ref ->$refs来获取元素,获取之后就是普通的dom元素.
   // console.log(this.$refs.box.offsetWidth)
   console.log(this.$refs.one.fn())
   console.log(this.$refs.one.msg)
   this.myMsg = this.$refs.one.msg
}
}
</script>
<style>
.box{
   width: 100px;
   height: 100px;
   background: red;
}
</style>

jquery

1.npm  install jquery --save
2.哪个页面需要直接导入即可  
import $ from 'jquery'
mounted(){
	$('button').click(()=>{
		$('.box').width()
	})
}
3.全局导入
在main.js 
import $ from 'jquery'
Vue.prototype.$ = $;
//此时这个$是vue实例中的一个属性,所以需要通过this调用
this.$('button').click(()=>{
		this.$('.box').width()
})

 

 

 

 

上一篇:Vue-day05


下一篇:Kali学习笔记 - day05