范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

堵在高速,不如学VUE

  用Vue开发一个网页并不难,但是也经常会遇到一些问题,其实大部分的问题都在文档中有所提及,再不然我们通过谷歌也能成功搜索到问题的答案,为了帮助小伙伴们提前踩坑,在遇到问题的时候,心里大概有个谱知道该如何去解决问题。这篇文章是将自己知道的一些小技巧,结合查阅资料整理成的一篇文章,如果喜欢的话可以点波赞/关注,支持一下,希望大家看完本文可以有所收获。
  文章内容总结: 组件style的scoped Vue 数组/对象更新 视图不更新 vue filters 过滤器的使用 列表渲染相关 深度watch与watch立即触发回调 这些情况下不要使用箭头函数 路由懒加载写法 路由的项目启动页和404页面 Vue调试神器:vue-devtools 组件style的scoped:
  问题:在组件中用js动态创建的dom,添加样式不生效。
  场景 :       
  结果 : // test生效   testAdd 不生效      .test[data-v-1b971ada]{    // 注意data-v-1b971ada       background:blue;       height:100px;       width:100px; }
  原因 :
  当
  它会 为组件中所有的标签和class样式添加一个scoped标识 ,就像上面结果中的data-v-1b971ada。
  所以原因就很清楚了:因为动态添加的dom没有scoped添加的标识, 没有跟testAdd的样式匹配起来 ,导致样式失效。
  解决方式 推荐:去掉该组件的scoped
  每个组件的css并不会很多,当设计到动态添加dom,并为dom添加样式的时候,就可以去掉scoped,会比下面的方法方便很多。 可以动态添加style   // 上面的栗子可以这样添加样式  newDom.style.height="100px" ; newDom.style.width="100px" ; newDom.style.background="red" ;Vue 数组/对象更新 视图不更新
  很多时候,我们习惯于这样操作数组和对象: data() {   // data数据          return {             arr: [1,2,3],             obj:{                  a: 1,                  b: 2    }          };       },    // 数据更新 数组视图不更新      this.arr[0] = "OBKoro1";      this.arr.length = 1;      console.log(arr);// ["OBKoro1"];     // 数据更新 对象视图不更新     this.obj.c = "OBKoro1";     delete this.obj.a;     console.log(obj);  // {b:2,c:"OBKoro1"}
  由于js的限制,Vue 不能检测以上数组的变动,以及对象的添加/删除,很多人会因为像上面这样操作,出现视图没有更新的问题。
  解决方式: this.$set(你要改变的数组/对象,你要改变的位置/key,你要改成什么value) this .$set (this .arr, 0 , "OBKoro1" ); // 改变数组 this .$set (this .obj, "c" , "OBKoro1" ); // 改变对象
  如果还是不懂的话,可以看看这个codependemo。 数组原生方法触发视图更新 :
  Vue可以监测到数组变化的, 数组原生方法 :     splice()、 push()、pop()、shift()、unshift()、sort()、reverse()
  意思是 使用这些方法不用我们再进行额外的操作,视图自动进行更新 。
  推荐使用splice方法会比较好自定义,因为slice可以在数组的任何位置进行删除/添加操作,这部分可以看看我前几天写的一篇文章:【干货】js 数组详细操作方法及解析合集 替换数组/对象
  比方说:你想遍历这个数组/对象,对每个元素进行处理,然后触发视图更新。 // 文档中的栗子:  filter遍历数组,返回一个新数组,用新数组替换旧数组     example1.items = example1.items.filter(function (item) {         return item.message.match(/Foo/)    })
  举一反三 :可以先把这个数组/对象保存在一个变量中,然后对这个变量进行遍历,等遍历结束后再用 变量替换对象/数组 。
  并不会重新渲染整个列表 :
  Vue 为了使得 DOM 元素得到最大范围的重用而实现了一些智能的、启发式的方法,所以用一个含有相同元素的数组去替换原来的数组是非常高效的操作。
  如果你还是很困惑,可以看看Vue文档中关于这部分的解释。 vue filters 过滤器的使用:
  过滤器,通常用于后台管理系统,或者一些约定类型,过滤。Vue过滤器用法是很简单,但是很多朋友可能都没有用过,这里稍微讲解一下。
  在html模板中的两种用法 :      {{ message | filterTest }}     
  在组件script中的用法 : export default {           data() {           return {             message:1            }       },      filters: {             filterTest(value) {        // value在这里是message的值     if(value===1){              return "最后输出这个值";         }        }   }}
  用法就是上面讲的这样,可以自己在组件中试一试就知道了,很简单很好用的。
  如果不想自己试,可以点这个demo里面修改代码就可以了,demo中包括 过滤器串联 、 过滤器传参 。
  推荐看Vue过滤器文档,你会更了解它的。 列表渲染相关
  v-for循环绑定model:
  input在v-for中可以像如下这么进行绑定,我敢打赌很多人不知道。 // 数据          data() {          return{            obj: {               ob: "OB",        koro1: "Koro1"        },         model: {           ob: "默认ob",          koro1: "默认koro1"      }          }     },    // html模板                // input就跟数据绑定在一起了,那两个默认数据也会在input中显示
  为此,我做了个demo,你可以点进去试试。
  一段取值的v-for
  如果我们有一段重复的html模板要渲染,又没有数据关联,我们可以:           这里会被渲染5次,渲染模板{{n}}
  v-if尽量不要与v-for在同一节点使用 :
  v-for 的优先级比 v-if 更高,如果它们处于同一节点的话,那么每一个循环都会运行一遍v-if。
  如果你想根据循环中的 每一项的数据来判断是否渲染,那么你这样做是对的 : 
  • {{ todo }}
  •   如果你想要根据 某些条件跳过循环,而又跟将要渲染的每一项数据没有关系的话,你可以将v-if放在v-for的父节点 : // 根据elseData是否为true 来判断是否渲染,跟每个元素没有关系
    • {{ todo }}
    // 数组是否有数据 跟每个元素没有关系
    • {{ todo }}

    No todos left!   如上,正确使用v-for与v-if优先级的关系,可以为你节省大量的性能。 深度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 // 默认触发一次 }, },   这两个选项可以同时使用,另外:是的,又有一个demo。   还有下面这一点需要注意。 这些情况下不要使用箭头函数:不应该使用箭头函数来定义一个生命周期方法 不应该使用箭头函数来定义 method 函数 不应该使用箭头函数来定义计算属性函数 不应该对 data 属性使用箭头函数 不应该使用箭头函数来定义 watcher 函数   示例: // 上面watch的栗子: handler:(val, oldVal)=> { // 可以执行 console.log("默认触发一次", val, oldVal); }, // method: methods: { plus: () => { // 可以执行 // do something } } // 生命周期: created:()=>{ // 可以执行 console.log("lala",this.obj) },   是的,没错,这些都能执行。   but :   箭头函数绑定了父级作用域的上下文, this 将不会按照期望指向 Vue 实例 。   也就是说,你 不能使用this来访问你组件中的data数据以及method方法了 。   this将会指向undefined。 路由懒加载写法: // 我所采用的方法,个人感觉比较简洁一些,少了一步引入赋值。 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 } ] })   文档的写法在于问题在于:如果我们的路由比较多的话,是不是要在路由上方引入赋值十几行组件?   第一种跟第二种方法相比就是把引入赋值的一步,直接写在component上面,本质上是一样的。两种方式都可以的,大家自由选择哈。 路由的项目启动页和404页面   实际上这也就是一个设置而已: export default new Router({ routes: [ { path: "/", // 项目启动页 redirect:"/login" // 重定向到下方声明的路由 }, { path: "*", // 404 页面 component: () => import("./notFind") // 或者使用component也可以的 }, ] })   比如你的域名为:www.baidu.com   项目启动页指的是: 当你进入www.baidu.com,会自动跳转到login登录页。   404页面指的是: 当进入一个没有 声明/没有匹配 的路由页面时就会跳转到404页面。   比如进入www.baidu.com/testRouter,就会自动跳转到notFind页面。   当你没有声明一个404页面,进入www.baidu.com/testRouter,显示的页面是一片空白。 Vue调试神器:vue-devtools   每次调试的时候,写一堆console是否很烦?想要 更快知道组件/Vuex内数据的变化 ?   那么这款 尤大开发 的调试神器:vue-devtools,你真的要了解一下了。   这波稳赚不赔,真的能提高开发效率。   安装方法 : 谷歌商店+科学上网,搜索vue-devtools即可安装。 不会科学上网?手动安装   安装之后 :   在chrome开发者工具中会看一个vue的一栏,如下对我们网页应用内数据变化,组件层级等信息能够有更准确快速的了解。


    来自企鹅星球IPENGOO的耳机LiAVS真无线蓝牙耳机使用体验企鹅能干嘛?王者荣耀?即时聊天?wechat?不不不,企鹅还能给你提供硬件产品,耳机,可以吗?这确实是我第一次接触来自腾讯大厂出品的一款真无线蓝牙耳机。腾讯在这个方面专门推出了一个还在担心宝宝辅食问题吗,大宇蒸煮辅食机帮你一步到位宝宝最金贵,每个家庭新来的成员都要认真对待。给宝宝喂食是其中一个稀疏平常又要认真对待的事情。在宝宝的成长过程中,是逐步由母乳转变为正常吃饭的状态。但是这个逐步的过程需要慢慢变化,让简报任天堂2021年9月24日的直面会任天堂2021年9月24日的直面会,新品内容汇总,一些已经公布消息的作品比如马里奥聚会我就不讲了小泉欢晃亲自主持怪物猎人riseG明确表示这是资料片,不过目前只有一段小视频,一只小香香肌肤更健康,moido二代小活泉亲肤花洒让你更精致随着生活节奏的加快,每天沐浴更衣算是告别一天辛苦的一种享受。洗澡人人都会,但是大多数情况下没人会关注洗澡水也会影响皮肤健康。阿Sir,我都天天冲澡了为什么我还是很痒呢?这就不得不说顺手一拿就吸尘倍思H5家用随手吸尘器使用体验居家卫生打扫一直以来是一件辛苦又费时的事情,吸尘器的产生提高了解决这个问题的效率,但是目前家用吸尘器个头都比较大,使用不方便,而且使用场景比较窄。比如比较火的这款,因为功率与电池的可动可静,魔浪S给你多场景降噪体验你有没有想过在运动的时候享受自己的思考空间,边运动边思考?有没有发现不知道什么时候健身跑步的时候身边突然出了很多噪音。锻炼结束后,如果还需要通勤或者其他方式返回还想要隔绝噪音,健身NVIDIAMX350独显曝光MX150连套两次马甲的产物?实话实说,NV这两年在轻薄本领域有点不思进取。按说MX250已然是MX150的马甲卡,延续了比较落后的Pascal架构,出现在各类搭载了IntelCPU的轻薄本上虽说产品本身的性能30万一台?!没错,来自苹果且史上最强PC整机即将开卖一台性能强悍到爆的台式电脑,你心里的预期需要多少钱,是2万5万还是10万?都不够!今年6月的WWDC(苹果全球开发者大会)上,高(ang)贵(gui)的苹果已给我们上了一堂课,真正听音乐时充个电NANKN2s真无线蓝牙耳机使用体验耳机也能跨个界?没错,这次的耳机已经不是一个耳机了,还是一个移动电源。这次的产品来自圈内常见的品牌,南卡NANK,产品型号是N2s。这个耳机可不简单,除了能力出众,还自带超能力,3119?倍思九合一TypeC扩展坞使用体验appleinc。引领潮流,这句话不假吧?引领就引领吧,非要剥夺用户的使用便捷权力。macbook这个产品的设计,确实很有购买欲,但是也影响了国内一众笔记本厂商跟进设计风格。难的是迷你F150?福特Maverick轻型皮卡车发布日前,福特汽车正式对外发布了全新紧凑型皮卡Maverick,相比于我们耳熟能详的F150,该车尺寸更迷你,并标配五座布局和混动系统,油耗仅5。88L100km,更强调务实经济属性。
    快递散户的利益谁来保护?各位网购朋友真诚忠告请慎重使用快递公司我们要用大的物流快递,你用顺丰icon虽然贵点但是他稳妥啊,你用中通,他接不了告诉你啊。可别像我似的,选择了极兔,终于把我气的要吐。最起码不会荐读注意!快递面单上收寄人隐私信息要加密处理4月21日,国家邮政局公安部国家互联网信息办公室联合召开电视电话会议,部署开展为期半年的邮政快递领域个人信息安全治理专项行动。会议明确,未来将大力推广虚拟安全号码隐私面单网络身份认比亚迪终止燃油车生产,后续汽车我们该怎样选择?比亚迪已经高调宣布开始停产纯燃油车的生产,这是一个明确的信号,也是一个具体的体现明确的型号说明新能源是不可逆的一个趋势,因为汽车开发需要1528个月,比亚迪宣布停产燃油车,说明亮点马斯克特斯拉中国的工作进展非常惊人4月23日下午,特斯拉CEO埃隆马斯克(ElonMusk)通过社交媒体表示,特斯拉中国的工作进展非常惊人。特斯拉上海超级工厂于4月19日顺利复工,当日便已有8000名员工到岗,整车苹果AppStore将下架长期不更新的应用程序4月24日消息,据国外媒体报道,苹果似乎将要开始逐渐下架长期不更新的App。在发送给受影响开发者的电子邮件中,苹果警告称,它将从应用程序商店中删除长时间内没有更新的应用程序,并给开2022创青春湖北青年创新创业大赛正在报名极目新闻记者刘丁维通讯员姚斌4月24日,极目新闻记者从湖北团省委获悉,2022创青春湖北青年创新创业大赛报名正式启动,大赛以青春喜迎二十大创新创业赢未来为主题,将从今年4月持续至7网商银行暂停支付宝提现支付业务便捷性不受影响近日,网商银行一则公告引发广泛关注。公告称,2022年4月21日起,网商银行逐步暂停支付宝余额提现或转入网商银行类账户相关业务,同时网商银行类账户仅支持本人绑定银行账户转入。根据网部分电商平台短时订单激增无法下单,北京市商务局回应供货情况新京报讯(记者戴轩)在今天(4月24日)的北京疫情防控新闻发布会上,北京市商务局副局长赵卫东表示,根据近期监测,目前北京生活必需品市场货源供应充足,交易正常。他介绍,从批发端看,近给国内的科学家排名,谁能排在第二位?给科学家排名并不是一件容易的事情,有时候关于谁能排在前面谁要排在后面的争论也没有多少意义,但给他们排名总是一件不可缺少的事情。对于很多人来说,科学家所做出的工作是深奥难懂的,一份排奥动新能源回应北京换电站火情系电池短路引发热失控所致4月19日21时左右,奥动新能源北京石景山杨庄换电站充电舱内一块电池出现小簇明火。记者从奥动新能源相关人士处了解到,火情系由于电池在非充电时的静置状态下,因自身短路引发热失控所致。打破德国垄断!中国远控技术取得新突破,网友直称国货太牛了不知大家是否羡慕在疲惫的下班路上,还没有进入家门,家里的环境就已经处于舒适的休息状态呢?灯光温度湿度等等环境都已经被安排地妥妥当当。说到这里我们难免会想到远程控制这项技术,事实上,