Vue基础

一.组件


1.Vue使用组件的三大步骤
(1).定义组件
(2).注册组件 在components
(3).使用组件 编写组件标签

2.VueComponents:
1.组件本质上就是一个名为VueComponents的构造函数且不是程序员自己定义的,是Vue.extnd生成的

2.我们只需要写标签 Vue解析时会帮我们创建组件的实例对象 Vue帮我们执行: new VueComponents(options)
3.特别注意:每次调用Vue.extnd 返回都是一个新的VueComponents

3.关于this的指向

1.组件中:
data 、methods、watch、computed中的函数 他们this.指向均是【VueComponents】不能使用el指定
2.new Vue()中:
data 、methods、watch、computed中的函数 他们this.指向均是  【Vue实例对象】
3.一个重要的内置关系:
VueComponents.prototype.__proto__ === Vue.prototype
 为什么要有这个关系?
让组件实例对象可以访问到Vue原型上的属性和方法

4.组件自定义事件

//通过父组件给子组件传递 props实现:子给父传一般都props一般都是父给子传

使用:

<Search :name="getName"/>
//Search组件标签

//使用
methods:{
name(){xxxx}
}

//通过父组件给子组件绑定一个自定义事件:子给父传递数据 $emit

<Search @name="getName"/>


methods:{
getName(){xxxx}
}


子组件:
methods:{
name(){this.$emit('getName',要传的数据)}
}

通过父组件给子组件绑定一个自定义事件:子给父传递数据ref实现

<Search ref="getName"/>

 mounted(){
        this.$refs.getName.$on('getName',this.getName)  		                     
        this.$refs.getName.$once('getName',this.getName)//只使用一次
    }

子组件:
methods:{
name(){this.$emit('getName',要传的数据)}
}
一般需要特殊的逻辑时使用ref

5.解绑自定义事件

<Search @name="getName"/>


//只能解绑一个自定义事件
this.$off('getName')
this.$off(['getName' ,'****']) //解绑多个个自定义事件
this$off()//所有的都解绑
this.$destroy() //销毁当前组件的实例对象,销毁后实例对象的事件就没了

6.组件间传数据 

1.props 功能:让组件接收外部传来的数据

1.数据传递: 

<Dome ***=""> //Dome组件标签 ***转入的对象

//接收的数据限制类型


props:{
type:number ,string
default: ** // 默认的值
required:true //必需传入
}


简单接收:
props:[ '   '  ,'   ' ,'    '    ] 
 //外部传入的数据不建议修改只允许读取,如果就要修改那就再声明一个变量赋值,修改你声明的变量

7.mixin混入

功能:可以把多个组件共用的配置提取成一个对象
使用方法:

第一步定义混合,如:



{
data(){....},
methods:{....}
}

第二种使用混入,列如:


1.全局混入 在main.js中 先引入  Vue.mixin(xxx)
2.局部混入 mixins:['xxx','xxx']

8.插件

本质:包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据。
定义插件:

插件名.install = function(vue.option){
//添加过滤去
Vue.filter(.....)
//添加全局指令
Vue.directive(.....)
//添加全局混入
Vue.mixin(.....)
//添加实例对象
Vue.prototype.$myMethod = function(){......}
}

使用:

Vue.use(插件名)

9.scoped样式

作用:让样式局部生效,防止冲突
写法:<style scoped>  </style>

二.浏览器本地存储webStorage

1.存储内容大小一般为5mb左右
2.浏览器通过Window.sessionStorage 和 Window.localStorage本地存储机制
3.相关API:

 

1.xxxxStorage.setItem('key','value') // 该方法接收一个键和值作为参数,会把键值对添加到存储中,如果键值对存在则进行替换
1.xxxxStorage.getItem('person')//该方法接收一个键名作为参数,返回键名对应的值
1.xxxxStorage.removeItem('key')//该方法接收一个键名作为参数,删除该键值对
1.xxxxStorage.clear() //清空存储的所有数据

2.sessionStorage  与 localStorage区别
1.sessionStorage存储的数据会随着浏览器窗口的关闭而消失
2.localStorage存储的内容,需要手动的清楚才会消失
3.xxxxStorage.getItem('person') 如果对应的person的value获取不到,那么返回的是null
4.JSON.pare(null)结果也是null

三.全局事件总线

1.一种组件间通信的方式,适合任意组件通信

2.安装全局事件总线:main.js文件

new Vue({
..............................
beforeCreate(){
Vue.prototype.$bus = this//安装全局事件总线,$bus就是当前应用的vm
},
....................................
})

3.使用全局事件总线

1.接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调在A组件自身

methods(){
demo(data){......}
..........
}
mounted(){
this.$bus.$on('xxx'.this.demo)}

2.最好在beforeDestroy钩子中,使用$off去解除当前组件用到的事件

四.$nextTike

使用:
1.this.$nextTike('回调函数')
2.作用:在下次DOM更新结束后执行指定的回调
3.什么时候用:当数据改变后,要基于更新后的新DOM进行操作的时候,要在nextTike所指定的回调函数中执行也可以理解为异步执行任务

五.插槽

1.作用,让父组件可以向子组件指定位置插入html结构,也是一种组件通信方式

1.默认插槽:

父组件中
<add>  <html标签> </add>//<add>为组件标签
在子组件中标签
<slot>   </slot>

2.具名插槽:

父组件中:
<add>  <html标签 slot=' 子组件中插槽的名字xx'> </add>//<add>为组件标签
在子组件中标签:
<slot   name='   插槽名字  '>   </slot>

3.作用域插槽:

父组件中:
1.<add> 
<template scope='xxx'> //scope接收数据 需要加template 
	 <html标签> 
 </template>
</add>   //<add>为组件标签
子组件中:
<slot :xxx='xxx'>   </slot>//传入数据可以传多个

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值