1.vue中事件修饰符详解(stop, prevent, self, once, capture, passive
.stop 是阻止冒泡行为,不让当前元素的事件继续往外触发,如阻止点击div内部事件,触发div事件
.prevent 是阻止事件本身行为,如阻止超链接的点击跳转,form表单的点击提交
.self 是只有是自己触发的自己才会执行,如果接受到内部的冒泡事件传递信号触发,会忽略掉这个信号
.capture 是改变js默认的事件机制,默认是冒泡,capture功能是将冒泡改为倾听模式
.once 是将事件设置为只执行一次,如 .click.prevent.once 代表只阻止事件的默认行为一次,当第二次触发的时候事件本身的行为会执行
.passive 滚动事件的默认行为 (即滚动行为) 将会立即触发,而不会等待 onScroll 完成。这个 .passive 修饰符尤其能够提升移动端的性能。
原生js的addEventListener第三个参数,默认是false,冒泡。改成true是捕获。
2、observable轻量化状态管理
observable轻量化状态管理,不能在vue serve Home.vue状态下执行,必须在npm run serve状态
Home.vue
// Home.vue
<template>
<div class="container">
<!-- <home-header></home-header> -->
<button @click="setCount(count+1)">+1</button>
<button @click="setCount(count-1)">-1</button>
<div>store中count:{{count}}</div>
<button @click="changeName(name1)">父页面修改name</button>
<div>store中name:{{name}}</div>
<!-- <router-link to="/detail">
<h5>跳转到详情页</h5>
</router-link>-->
</div>
</template>
<script>
import { store, mutations } from './store'
export default {
data() {
return {
name1: '主页的name',
}
},
components: {
// HomeHeader
},
computed: {
count() {
return store.count
},
name() {
return store.name
},
},
methods: {
setCount: mutations.setCount,
changeName: mutations.changeName
}
}
</script>
observable.js
import Vue from 'vue';
export let store = Vue.observable({ count: 0, name: '李四' });
export let mutations = {
setCount(count) {
store.count = count;
console.log('count:', store.count)
},
changeName(name) {
store.name = name;
console.log('name-in:', store.name)
}
}
3、长列表性能优化
我们都知道vue会通过object.defineProperty对数据进行劫持,来实现视图响应数据的变化,然而有些时候我们的组件就是纯粹的数据展示,不会有任何改变,我们就不需要vue来劫持我们的数据,在大量数据展示的情况下,这能够很明显的减少组件初始化的时间,那如何禁止vue劫持我们的数据呢?可以通过object.freeze方法来冻结一个对象,一旦被冻结的对象就再也不能被修改了
另外需要说明的是,这里只是冻结了users的值,引用不会被冻结,当我们需要reactive数据的时候,我们可以重新给users赋值。
4、vuex刷新后保存
可以判断刷新前保存localStorage
或者用第三方插件,包裹stores,随时保存
5、mixin
1.抽离公共的对象和方法,放到mixin里面
2.mixin相当于子组件,先执行
3.使用方法:
import mymixin from ‘****/mymixin’ // .js可以不用写
mixins:[mymixin]
6、keep-alive
1.简单的用v-show
2.复杂的用keep-alive
3.有自己的生命周期 activated 和 deactivated
4.
@TOC
render 函数 跟 template 一样都是创建 html 模板的,返回虚拟dom
render: h => h(App) 是下面内容的缩写:
render (h){
return h(App);
}
render (createElement) {
return createElement(App);
}
render: h => h(App)
el : #app, 等于 $mount(’#app’)
// var vm = new Vue({
// el: "#root",
// data(){
// return{
// data: 11111
// }
// }
// })
var vm = new Vue({
data(){
return{
data: 11111
}
}
}).$mount("#root")
7、vue中使用jquery
npm i jquery -S
#=全局引入,在src/main.js文件
import jquery from ‘jquery’
window.$ = jquery
#在需要的组件中
import $ from ‘jquery’