# VUE的一些工具类
# 计算属性
export default {
computed: {
return 'aa'
}
}
# 自定义指令
// 注册全局组件
Vue.component('my-button', {
render(h){
return h('button', 'hello');
}
})
// 自定义指令
Vue.directive('color', function(el, obj){
el.style.color = obj.value || 'red';
})
# eventBus
// 子组件-1
import bus from './bus';
created(){
bus.$on('getData1', (data) => {
this.data = data;
})
}
// 子组件-2
import bus from './bus';
created(){
bus.$on('getData2', (data) => {
this.data = data;
})
},
methods: {
getData(){
bus.$emit('getData1', this.data)
}
}
// bus
import Vue from 'vue';
let vm = new Vue();
export default vm;
# filter
<div id="app">
<!-- | 管道符 -->
<h1>{{name|b('options')|test}}</h1>
</div>
Vue.filter('test', function(val){
return 'hello_' + val + 'world';
})
export default {
data(){
return {
name: '小明'
}
},
filters: {
// 视图更新 过滤器就会更新,与直接在模板内使用methods方法一样
join(val, options){
return '你好_' + val + options;
}
}
}
过滤器一般用来格式化数据,3.0已经移除该方法
# 插槽
<div v-for="i in data">
<slot name='a'></slot>
<slot name='b' :data="i"></slot>
</div>
<h1 slot="a">hello</h1>
<h1 slot-scope="data">haha{{data}}</h1>
<template v-slot:a>
<h1>world</h1>
</template>
简写
<template #a>
<h1>haha</h1>
</template>
<template #b="data">
<h1>haha{{data}}</h1>
</template>
# watch
export default {
data(){
return {
name: 'a',
obj: {
a: 123
}
}
},
watch: {
name(newVal, oldVal){
console.log(newVal, oldVal);
},
obj: {
deep: true, // 深度监听
immediate: true, // 页面加载的时候先执行一次
handler(newVal, oldVal){
console.log(newVal, oldVal);
}
}
'obj.a': function(newVal, oldVal){ // 单独监听对象下的某一个属性
console.log(newVal, oldVal)
}
}
}
计算属性和侦听器区别:
- 计算属性不好写异步,watch无所谓