vue技巧分享

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’

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端段

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值