vue使用技巧

这里给大家分享一下vue中的一些技巧,希望对大家有用处。(话不多说上代码)

https://www.tuicool.com/articles/UNJVryR

1,vue路由拦截浏览器后退实现表单保存类似需求(为了防止用户突然离开,没有保存已输入的信息。)

//在路由组件中:
mounted(){
},
beforeRouteLeave (to, from, next) {
  if(用户已经输入信息){
    //出现弹窗提醒保存表单,或者自动后台为其保存

  }else{
    next(true);//用户离开
  }


请参考vue文档全局钩子和组件钩子

2,路由懒加载写法:

    // 我所采用的方法,个人感觉比较简洁一些,少了一步引入赋值。
    const router = new VueRouter({
      routes: [
        path: '/app',
        component: () => import('./app'),  // 引入组件
      ]
    })
    // Vue路由文档的写法:
    const app = () => import('./app.vue') // 引入组件
    const router = new VueRouter({
      routes: [
        { path: '/app', component: app }
      ]
    })

3,路由的项目启动页和404页面

一般项目都会设置这个,如果默认进入地址会跳到login页面,如果你输入的是一个没有用的路由或者是空路由会跳转到notFind页面(你自己设置的404页面)

    export default new Router({
      routes: [
        {
          path: '/', // 项目启动页
          redirect:'/login'  // 重定向到下方声明的路由 
        },
        {
          path: '*', // 404 页面 
          component: () => import('./notFind') // 或者使用component也可以的
        },
      ]
    })

4,setInterval路由跳转继续运行并没有销毁问题

beforeDestroy(){
     //我通常是把setInterval()定时器赋值给this实例,然后就可以像下面这么暂停。
    clearInterval(this.intervalid);
},

beforeDestroy方法是生命周期里组件销毁前执行的钩子函数,在离开的时候会触发这个方法,这个方法在其他的地方也会有妙用,希望大家可以去了解一下。

5,setTimeout/setInterval this指向改变,无法用this访问VUe实例

这个地方大家的默认方法肯定是:

    //使用变量访问this实例
    let self=this;
        setTimeout(function () {  
          console.log(self);//使用self变量访问this实例
        },1000);

其实这个地方我们可以用箭头函数,因为箭头函数会改变this的指向,而指向的刚好是自己的父级this,所以我们可以这样用:

    //箭头函数访问this实例 因为箭头函数本身没有绑定this
     setTimeout(() => { 
       console.log(this);
    }, 500);

这样我们的this就是指向我们的vue实例了。

6,Vue 数组/对象更新 视图不更新

方法一:直接使用最简单也是最有效的方法,深拷贝对象或者数组,视图会进行更新,不过会有一个缺点,深拷贝后的数组或者对象不是原来的那个数组或者对象,是你现在改变了之后的值。

上代码:

你的对象或者数组=JSON.parse(JSON.stringify(你的对象或者数组))

先进行转字符串,再转回对象,这个就进行了一个拷贝的过程,会触发视图的改变,同时也进行了一个数组的替换,有利有弊。

方法二:this. set(//keyvalue)</h3><preclass="prettyprinthljskotlin"style="padding:.5em;fontfamily:Menlo,Monaco,Consolas,CourierNew,monospace;color:rgb(68,68,68);marginbottom:1.5em;fontsize:14px;lineheight:1.5em;backgroundcolor:rgb(246,246,246);"name="code"><spanclass="hljskeyword"style="color:rgb(51,51,51);fontweight:700;">this</span>. s e t ( 你 要 改 变 的 数 组 / 对 象 , 你 要 改 变 的 位 置 / k e y , 你 要 改 成 什 么 v a l u e ) < / h 3 >< p r e c l a s s =" p r e t t y p r i n t h l j s k o t l i n " s t y l e =" p a d d i n g : .5 e m ; f o n t − f a m i l y : M e n l o , M o n a c o , C o n s o l a s , ′ C o u r i e r N e w ′ , m o n o s p a c e ; c o l o r : r g b ( 68 , 68 , 68 ) ; m a r g i n − b o t t o m : 1.5 e m ; f o n t − s i z e : 14 p x ; l i n e − h e i g h t : 1.5 e m ; b a c k g r o u n d − c o l o r : r g b ( 246 , 246 , 246 ) ; " n a m e =" c o d e ">< s p a n c l a s s =" h l j s − k e y w o r d " s t y l e =" c o l o r : r g b ( 51 , 51 , 51 ) ; f o n t − w e i g h t : 700 ; "> t h i s < / s p a n > . set(this.arr, 0, “OBKoro1”); // 改变数组 this.$set(this.obj, “c”, “OBKoro1”); // 改变对象

这个是vue专门为改变不了数组设定的一个方法,使用也很简单(如果还是不懂请参考vue文档)

7,深度watch与watch立即触发回调

watch很多人都在用,但是这watch中的这两个选项 deep 、 immediate ,或许不是很多人都知道,我猜。

选项:deep

在选项参数中指定 deep: true ,可以监听对象中属性的变化。

选项:immediate

在选项参数中指定 immediate: true, 将立即以表达式的当前值触发回调,也就是默认触发一次。

    watch: {
        obj: {
          handler(val, oldVal) {
            console.log('属性发生变化触发这个回调',val, oldVal);
          },
          deep: true // 监听这个对象中的每一个属性变化
        },
        step: { // 属性
          //watch
          handler(val, oldVal) {
            console.log("默认触发一次", val, oldVal);
          },
          immediate: true // 默认触发一次
        },
      },
            </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值