自定义指令
我们可以自己创造一个指令:v-xxx的形式,通过directives:'xxx'(element,binding){}来定义指令,其中element指的是我们调用指令时传入的参数,binding指的是绑定的对象。
刚刚给出的是简写形式,完整写法应为:
directives:{
fbind:{
//指令与元素成功绑定时
bind(element,binding){
element.value = binding.value;
},
//指令所在元素被插入页面时
inserted(element,binding){
element.focus()
},
//指令所在的模板被重新解析时
update(element,binding){
element.value = binding.value;
}
}
}
简写形式中其实只有bind和update函数,因此如果我们用简写形式,那么该指令将会在一下时候被调用:
1.指令与元素成功绑定时(即一上来xxx)。
2.指令所在模板被重新解析时,即数据有更新时。
生命周期
(我们平时也会把它叫做生命周期钩子)
即在某些特殊的时间点,Vue会为我们调用的函数。
我们比较常用的生命周期钩子有mounted和beforeDestroy,当我们想要实现"一上来xxx"的功能时,可以把函数语句写在mounted钩子里。当我们想要停止页面维护,做一些收尾工作时,可以把函数语句写在beforeDestroy中,比如停止定时器。
beforeCreate和created中间发生了什么?
中间是数据监测和数据代理过程,因此如果我们在beforeCreate中更改数据,是没有用处的,因为数据监测和数据代理还未开始。
非单文件组件
vm对象是由Vue构造函数构造的,组件对象是由VueComponent构造函数构造的。
有一个很重要的内置关系式:VueComponent.prototype.__proto__ == Vue.prototype
也就是说,组件实例对象也可以访问Vue原型上的所有属性和方法。
单文件组件
单独的vue文件中配置<template><template/>,<script></script>,<style></style>,可以分别写入组件的代码结构,样式,数据交互。
每一个组件都要写暴露export default,在父组件中要进行import引入。(这部分好像是ES6模块化的知识,要记得补一下)
在父组件中使用子组件步骤:引入,注册,创建标签使用。
ref属性
可以使用ref属性来获取DOM元素,语法为this.$ref.xxx,通过这个就可以访问DOM元素。
props
我们可以使用props将数据从父组件传到子组件中。子组件使用props选项进行数据接收。
简单接收:props:['name','address','age']
接收的同时进行类型限制:
props:{
name:String,
age:Number,
address:String
}
接收同时对数据进行类型限制+默认值指定+必要性限制
props:{
name:{
type:String,
required:true
},
age:{
type:Number,
default:99 //默认值
},
address:{
type:String,
required:true
}
}
mixin混合
我们可以把不同组件中相同的部分写成一个mixin文件,写时通过export暴露,在组件中import引入,并使用mixins选项进行注册后使用。
plugins插件
我们可以使用plugins自定义功能,可以用于给Vue的原型对象添加功能,全局可用。
创建plugins的js文件时,注意要暴露一个install方法,传入的参数是Vue构造函数。在main.js中,用import引入插件,Vue.use(plugins)来使用。