vue使用技巧和项目中遇到的问题

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

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 }
 ]
})
//前端全栈学习交流圈:866109386
//面向1-3经验年前端开发人员
//帮助突破技术瓶颈,提升思维能力

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

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

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

前端全栈学习交流圈:866109386,面向1-3经验年前端开发人员,帮助突破技术瓶颈,提升思维能力
群内有大量PDF可供自取,更有干货实战项目视频进群免费领取。

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(你要改变的数组/对象,你要改变的位置/key,你要改成什么value)

this.$set(this.arr, 0, "OBKoro1"); // 改变数组
this.$set(this.obj, "c", "OBKoro1"); // 改变对象

前端全栈学习交流圈:866109386,面向1-3经验年前端开发人员,帮助突破技术瓶颈,提升思维能力
群内有大量PDF可供自取,更有干货实战项目视频进群免费领取。

这个是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 // 默认触发一次
 },
 },
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue后台管理项目,可能会遇到一些难点。其一些常见的难点包括: 1. 权限控制:在后台管理系统,权限控制是非常重要的一部分。它涉及到用户角色、权限管理和页面级别的访问控制。根据引用提到的文章,浅谈了Vue后台管理系统权限控制的思考与实践,你可以参考该文章的思路和方法来解决权限控制的难题。 2. 组件封装:Vue后台管理项目通常包含大量的组件,如表格、表单、菜单、弹窗等。在实际项目,你可能需要根据项目需求对这些组件进行封装,使其更加灵活和易于复用。其,引用提到了一些常见的组件封装技巧,例如分页组件的封装、查询和重置功能的实现、弹出框的使用等等。 3. 数据校验:在后台管理系统,数据的输入和提交都需要进行校验,以确保数据的有效性和安全性。Vue提供了一些内置的校验方法,如表单验证、自定义指令等。你可以使用这些方法来进行数据校验,以应对引用提到的校验难点。 4. 组件通信:在一个复杂的后台管理系统,各个组件之间的通信是非常常见的。你可能需要根据业务需求使用一些常见的通信方式,如事件总线、Vuex等。这样可以方便不同组件之间的数据传递和状态管理,从而提高项目的开发效率。 综上所述,Vue后台管理项目的难点主要包括权限控制、组件封装、数据校验和组件通信。你可以根据实际项目需求,结合相关的知识点和经验,来解决这些难题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [浅谈vue后台管理系统权限控制思考与实践](https://download.csdn.net/download/weixin_38707240/12948508)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【精品课】Vue.js实现电商后台管理系统(企业项目实战)](https://download.csdn.net/download/weixin_38503483/19944528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue后台管理知识点、难点总结02](https://blog.csdn.net/hnn567/article/details/123113223)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值