目录

  • watch监听一个对象时,如何排除某些属性的监听
  • computed如何实现传参?
  • vue的hook的使用
  • Vue的el属性和$mount优先级?
  • 动态指令和参数使用过吗?
  • 相同的路由组件如何重新渲染?
  • 自定义v-model
  • 如何将获取data中某一个数据的初始状态?
  • 为什么不建议v-for和v-if同时存在
  • 计算变量时,methods和computed哪个好?

watch监听一个对象时,如何排除某些属性的监听

下面代码是,params发生改变就重新请求数据,无论是a,b,c,d属性改变

data() {return {params: {a: 1,b: 2,c: 3,d: 4},};},
watch: {params: {deep: true,handler() {this.getList;},},}

但是如果我只想要a,b改变时重新请求,c,d改变时不重新请求呢?

mounted() {Object.keys(this.params).filter((_) => !["c", "d"].includes(_)) // 排除对c,d属性的监听.forEach((_) => {this.$watch((vm) => vm.params[_], handler, {deep: true,});});},
data() {return {params: {a: 1,b: 2,c: 3,d: 4},};},
watch: {params: {deep: true,handler() {this.getList;},},}

computed如何实现传参?

// html
<div>{{ total(3) }}// js
computed: {total() {return function(n) {return n * this.num}},}

vue的hook的使用

  • 同一组件中使用
    这是我们常用的使用定时器的方式
export default{data(){timer:null  },mounted(){this.timer = setInterval(()=>{//具体执行内容console.log('1');},1000);}beforeDestory(){clearInterval(this.timer);this.timer = null;}
}

上面做法不好的地方在于:得全局多定义一个timer变量,可以使用hook这么做:

export default{methods:{fn(){let timer = setInterval(()=>{//具体执行代码console.log('1');},1000);this.$once('hook:beforeDestroy',()=>{clearInterval(timer);timer = null;})}}
}
  • 父子组件使用
    如果子组件需要在mounted时触发父组件的某一个函数,平时都会这么写:
//父组件
<rl-child @childMounted="childMountedHandle"
/>
method () {childMountedHandle() {// do something...}
},// 子组件
mounted () {this.$emit('childMounted')
},

使用hook的话可以更方便:

//父组件
<rl-child @hook:mounted="childMountedHandle"
/>
method () {childMountedHandle() {// do something...}
},

Vue的el属性和$mount优先级?

new Vue({router,store,el: '#app',render: h => h(App)
}).$mount('#ggg')

这是官方的一张图,可以看出el和$mount同时存在时,el优先级 > $mount

动态指令和参数使用过吗?

<template>...<aButton @[someEvent]="handleSomeEvent()" :[someProps]="1000" />...
</template>
<script>...data(){return{...someEvent: someCondition ? "click" : "dbclick",someProps: someCondition ? "num" : "price"}},methods: {handleSomeEvent(){// handle some event}}
</script>

相同的路由组件如何重新渲染?

开发人员经常遇到的情况是,多个路由解析为同一个Vue组件。问题是,Vue出于性能原因,默认情况下共享组件将不会重新渲染,如果你尝试在使用相同组件的路由之间进行切换,则不会发生任何变化。

const routes = [{path: "/a",component: MyComponent},{path: "/b",component: MyComponent},
];

如果依然想重新渲染,怎么办呢?可以使用key

<template><router-view :key="$route.path"></router-view>
</template>

自定义v-model

一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value attribute 用于不同的目的。model 选项可以用来避免这样的冲突:

Vue.component('base-checkbox', {model: {prop: 'checked',event: 'change'},props: {checked: Boolean},template: `<inputtype="checkbox"v-bind:checked="checked"v-on:change="$emit('change', $event.target.checked)">`
})

现在在这个组件上使用 v-model 的时候:

<base-checkbox v-model="lovingVue"></base-checkbox>

这里的 lovingVue 的值将会传入这个名为 checked 的 prop。同时当 触发一个 change 事件并附带一个新的值的时候,这个 lovingVue 的 property 将会被更新。

如何将获取data中某一个数据的初始状态?

在开发中,有时候需要拿初始状态去计算。例如

data() {return {num: 10},
mounted() {this.num = 1000},
methods: {howMuch() {// 计算出num增加了多少,那就是1000 - 初始值// 可以通过this.$options.data().xxx来获取初始值console.log(1000 - this.$options.data().num)}}

为什么不建议v-for和v-if同时存在

<div v-for="item in [1, 2, 3, 4, 5, 6, 7]" v-if="item !== 3">{{item}}
</div>

上面的写法是v-for和v-if同时存在,会先把7个元素都遍历出来,然后再一个个判断是否为3,并把3给隐藏掉,这样的坏处就是,渲染了无用的3节点,增加无用的dom操作,建议使用computed来解决这个问题:

<div v-for="item in list">{{item}}
</div>computed() {list() {return [1, 2, 3, 4, 5, 6, 7].filter(item => item !== 3)}}

计算变量时,methods和computed哪个好?

<div><div>{{howMuch1()}}</div><div>{{howMuch2()}}</div><div>{{index}}</div>
</div>data: () {return {index: 0}}
methods: {howMuch1() {return this.num + this.price}}
computed: {howMuch2() {return this.num + this.price}}

computed会好一些,因为computed会有缓存。例如index由0变成1,那么会触发视图更新,这时候methods会重新执行一次,而computed不会,因为computed依赖的两个变量num和price都没变。

vue2 最后的倔强(知识点查漏补缺)相关推荐

  1. 数据库知识点查漏补缺

    独占锁和共享锁的区别 共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排它锁.获准共享锁的事务只能读数据,不能修改数据. 排他锁(X锁):如果事务T对数据A加上排他 ...

  2. react 更新input 默认值setfieldsvalue_值得收藏的React知识点查漏补缺

    来源:https://www.html.cn/interview/14282.html 如果你在为有经验的人或新生寻找ReactJS面试问题和答案,那么你来对地方了.本篇可以帮助前端开发人员准备和清除 ...

  3. 机器学习知识点查漏补缺(朴素贝叶斯分类)

    一.基本模型 朴素贝叶斯分类模型的基本思想就是贝叶斯公式,对以特征为条件的各类别的后验概率. 贝叶斯公式如下: 对标朴素贝叶斯分类模型的公式如下: 分子中的第二项为每个类别的概率(实际运算即频率),如 ...

  4. Java学习查漏补缺及知识点整理

    本文是根据B站up主青空の霞光的JavaSE教程所整理的查漏补缺知识点笔记,有所简陋,希望能帮到大家.有错误希望大家指正.持续更新中- 注意:读此笔记需有一定的Java基础. 文章目录 一.断点调试 ...

  5. 前端查漏补缺 全知识点合集(更新中9.3)

    该篇文章用于本人查漏补缺,会有大量知识点,不定期更新,有人愿意看就随便看看. HTML 浏览器的运行机制: 构建DOM树(parse):渲染引擎解析HTML文档,首先将标签转换成DOM树中的DOM n ...

  6. 前端面试查漏补缺--(一) 防抖和节流

    前言 本系列最开始是为了自己面试准备的.后来发现整理越来越多,差不多有十二万字符,最后决定还是分享出来给大家. 为了分享整理出来,花费了自己大量的时间,起码是只自己用的三倍时间.如果喜欢的话,欢迎收藏 ...

  7. 计算机考试属于相对性评价还是绝对性评价,【易错检测】查漏补缺第46天 — 相对性评价与绝对性评价...

    原标题:[易错检测]查漏补缺第46天 - 相对性评价与绝对性评价 近期大部分地区的招教都进入了笔试的考前冲刺阶段⏱,为了帮助大家查漏补缺,这个新栏目会从历年真题出错率较高的知识点入手,来帮助大家备考. ...

  8. C/C++基础查漏补缺(八)----------寒假学习笔记(八)

    寒假C语言基础查漏补缺笔记(八) 本系列文章是基于自身的编程基础而编写的,其内容并非适用于所有人,请海涵~ 不过内容应该包括了所有的考点.用法,初学C/C++的大学生或者noip入门级选手可以以此作为 ...

  9. C/C++基础查漏补缺(一)----------寒假学习笔记(一)

    寒假C语言基础查漏补缺笔记(一) 本系列文章是基于自身的编程基础而编写的,其内容并非适用于所有人,请海涵~ 不过内容应该包括了所有的考点.用法,初学C/C++的大学生或者noip入门级选手可以以此作为 ...

最新文章

  1. R语言计算回归模型每个样本(观察、observation、sample)的杠杆值(leverage)实战:如果一个样本的预测变量比其他样本的预测变量值更极端,那么被认为具有很高的杠杆作用
  2. spring集成rabbitmq遇到的问题
  3. 【原】简单shell练习(四)
  4. java 获取音频文件时长
  5. 倒计时 5 天!年度开发者盛会 Unite Shanghai 2019 全日程揭晓(附表)
  6. SQL本地事务、asp.net事务、DTC
  7. NOIP2016提高A组 B题 【HDU3072】【JZOJ4686】通讯
  8. java linux怎么抓tcp包_Linux使用tcpdump抓取网络数据包示例
  9. Thinkpad X230 黑苹果macOS 10.14 和10. 15驱动AR9285网卡
  10. AD9361 介绍 (上)
  11. 3dmax界面由哪几部分组成
  12. 2014年domino学习小结
  13. qq等级计算机在线,I'M QQ - QQ官方网站
  14. 天眼查app协议逆向分析
  15. 全网最全java Springboot对接微信公众号开发平台(可能是最全)!
  16. element el-input特殊字符校验
  17. 软件分析与用户体验分析
  18. 服务器安装Ubuntu
  19. ubuntu18使用preseed文件定制ISO镜像实现自动化安装
  20. 读书笔记-企业的股权结构

热门文章

  1. 普联TP-LINK TL-SL5428交换机对应的光模块型号及典型应用方案
  2. 宁波市第三届网络安全大赛-WriteUp(Misc)
  3. 文献阅读(24)KDD2020-GCC:Graph Contrastive Coding for Graph Neural Network Pre-Training
  4. java 如何看装好没_如何查看Java配置好了没
  5. CVPR2020 Oral|实例分割新思路: Deep Snake
  6. MinGW/cygwin 快速开始
  7. OpenGL超级宝典(第五版)环境配置【转】
  8. 深圳java期望薪资,程序员期望薪资 与实际 offer差距这么大吗?
  9. 基于主从博弈理论的共享储能与综合能源微网优化运行研究
  10. jeesite工作流使用