vue 自定义指令
全局注册/局部注册
钩子函数
bind(){},//绑定
inserted(){},//插入(父节点存在即可调用,不必存在于 document 中)
update(){},// 更新
componentUpdated(){},// 被绑定元素完成第一次生命周期时调用
unbind(){},// 解绑
参数【以bind 为例】
bind(el, binding, vnode, oldVnode){
el:'直接操作 DOM',
binding:{
def:{},// def 算法
name:'test', // v-test="1+1" 指令名(不包含 v- 前缀)
rawName:'v-test',
value:'2',
oldValue:'',
expression:'1+1', // v-test="1+1"
arg:'foo', // v-test:foo
modifiers:{'a':true,'b':true}, // v-test.a.b
modifiers:{'a':true,'b':true}, // v-test.a.b
}
vnode:'Vue编译的生成虚拟节点'
oldVnode:'上一次的虚拟节点'
},
vue 自定义 filter
语法:
demo:
:class="node | checkboxClass"
{{price | myCurrency('¥',true)}}
filters: {
/*
语法:{{表达式 | 过滤器}}
demo:
:class="node | checkboxClass"
{{price | myCurrency('¥',true)}}
*/
checkboxClass () {},
},
vuex
https://vuex.vuejs.org/zh/ -- 状态管理官网
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
},
mutations: {
},
actions: {
}
})
vue slot分发
父组件需要在子组件内放一些DOM,它就是负责这些DOM是否显示,在哪个地方显示
虽子组件的child标签包含一些dom和内容,但由于他不在子组件的template属性中,因此不属于子组件【不显示】
在组件template中添加
具名slot
父组件要在分发的标签中添加属性"slot=name名"
子组件在对应分发位置上的slot标签添加属性"name=name名"
js 里面用 '' html 里 用 "" java里用 ""
1
2
var vm = new Vue({
// 选项
el:'#app',
data:{},
computed:{
dataFormat(){
let date = new Date();
let month = (date.getMonth() + 1).toString().padStart(2,'0');
let strDate = date.getDate().toString().padStart(2,'0');
return `${date.getFullYear()}-${month}-${strDate}`
},
currentTime() {
let date = new Date();
//时间格式HH:MM:SS
return `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;
},
},
watch:{},
methods:{},
created(){},
components:{
child:{
template:'我是子组件 '
}
},// 局部组件
})
vue 修饰符和js事件处理机制
事件捕获(目标元素)
事件冒跑(事件传播)
事件监听
onclick
document.getElementById("btn").onclick = myClick;
document.getElementById("btn").addEventListener('click',function(){},false)
document.getElementById("btn").removeEventListenter('click',function(){},false)
阻止浏览器的默认事件的发生 event.preventDefault()
阻止事件冒泡 event.stopPropagation()
vue 组件
props 我们在父组件中需要将子组件需要的数据动态导入,在子组件中,我们的接收和使用
export default{
name:"",
props:["flag","attributeList","szList","sxList"],
data(){},// data 必须是一个函数
}
将父组件的方法注入子组件 @selectFunc="selectFunc"
this.$emit('selectFunc', value)
ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上(组件 name )
基础组件
我们把会在各个组件中被频繁的用到称为基础组件。
可以使用 require.context 只全局注册这些非常通用的基础组件。
全局注册的行为必须在根 Vue 实例 (通过 new Vue) 创建之前发生。
组件 data 必须是一个函数
类型检查
type 可以是下列原生构造函数中的一个 1/8
String -- string
Number -- number
Boolean -- boolean
Symbol
Array
Object
Date
Function
组件传值
单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行
title="dkd" // 通过向子组件静态传值
:key="post.id" // 通过向子组件动态传值
props:[] // 用来接收数据
通过 @method="method" 向子组件传递事件
this.$emit('method',val) 并传入事件名称来触发一个事件 【事件分发】
this.$refs.AuditReason.initModel(opt,type); 【组件注册和调用】
this.$event 访问到被抛出的这个值 val
v-model
将其 value 特性绑定到一个名叫 value 的 prop 上
在其 input 事件被触发时,将新的值通过自定义的 input 事件抛出
组件命名
html 大小写不敏感,浏览器会把所有大写字符解释为小写字符。
camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名。
Vue Router 两种函数
Vue.beforeEach(function(to,form,next){}) /*在跳转之前执行*/
beforeEach函数有三个参数:
Vue.afterEach(function(to,form))/*在跳转之后判断*/
router.beforeEach((to, from, next) => {
tips = 0
// 获取传递的参数并进行操作 每次路由加载时读取上次操作后的数组
bus.$on('switchPage', (params) => {
currentMenuList = params
})
if (Object.keys(to.meta).length !== 0) {
currentMenuList.forEach(item => {
if (item.name === to.meta.name) {
tips = 1
}
})
let obj = {
title: to.meta.title,
name: to.meta.name,
isMenu: to.meta.isMenu,
path: to.fullPath
}
if (tips === 0) {
currentMenuList.unshift(obj)
}
bus.$emit('switchPage', currentMenuList)
}
if (to.path !== '/sign') {
if (window.sessionStorage.user) {
next()
} else {
next('/sign')
}
} else {
if (window.sessionStorage.user) {
next('/')
} else {
next()
}
}
})
vue 消息提示 this.$message()
/*
配置项:
type:类型【success,error,info,warning】
button:按钮
text:内容
duration:时间
*/
import VueMessage from './components/message'
Vue.use(VueMessage)
message () {
this.$message({
type:'success',
text:11111,
});
},
模板语法
{{}}
vue指令
ps:v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。
频繁切换请用 v-show
属性绑定
修饰符
vue 实例选项参数
vue 渲染机制,遍历算法,局部更新
vue 组件
相关概念
父子组件事件监听和广播通信
import/require 使用一个模块系统和组件
Props 特性
type 可以是下列原生构造函数中的一个
非 prop 特性(也是常用场景)
@focus.native="onFocus"
slot 内容分发
动态组件
异步组件
列表过度
css 过度