荣耀黄金

1. Vue的优点?Vue的缺点?

优点:渐进式,组件化,轻量级,虚拟dom,响应式,单页面路由,数据与视图分开

缺点:单页面不利于seo,不支持IE8以下,首屏加载时间长

2. 为什么说Vue是一个渐进式框架?

渐进式:通俗点讲就是,你想用啥你就用啥,咱也不强求你。你想用component就用,不用也行,你想用vuex就用,不用也可以

3. Vue跟React的异同点?

相同点:

  • 1.都使用了虚拟dom
  • 2.组件化开发
  • 3.都是单向数据流(父子组件之间,不建议子修改父传下来的数据)
  • 4.都支持服务端渲染

不同点:

  • 1.React的JSX,Vue的template
  • 2.数据变化,React手动(setState),Vue自动(初始化已响应式处理,Object.defineProperty)
  • 3.React单向绑定,Vue双向绑定
  • 4.React的Redux,Vue的Vuex

4. MVVM是什么?和MVC有何区别呢?

MVC

  • Model(模型):负责从数据库中取数据
  • View(视图):负责展示数据的地方
  • Controller(控制器):用户交互的地方,例如点击事件等等
  • 思想:Controller将Model的数据展示在View上

MVVM

  • VM:也就是View-Model,做了两件事达到了数据的双向绑定 一是将【模型】转化成【视图】,即将后端传递的数据转化成所看到的页面。实现的方式是:数据绑定。二是将【视图】转化成【模型】,即将所看到的页面转化成后端的数据。实现的方式是:DOM 事件监听。
  • 思想:实现了 View 和 Model 的自动同步,也就是当 Model 的属性改变时,我们不用再自己手动操作 Dom 元素,来改变 View 的显示,而是改变属性后该属性对应 View 层显示会自动改变(对应Vue数据驱动的思想)

区别

整体看来,MVVM 比 MVC 精简很多,不仅简化了业务与界面的依赖,还解决了数据频繁更新的问题,不用再用选择器操作 DOM 元素。因为在 MVVM 中,View 不知道 Model 的存在,Model 和 ViewModel 也观察不到 View,这种低耦合模式提高代码的可重用性

Vue是不是MVVM框架?

Vue是MVVM框架,但是不是严格符合MVVM,因为MVVM规定Model和View不能直接通信,而Vue的ref可以做到这点

5. Vue和JQuery的区别在哪?为什么放弃JQuery用Vue?

  • 1.jQuery是直接操作DOM,Vue不直接操作DOM,Vue的数据与视图是分开的,Vue只需要操作数据即可
  • 2.jQuery的操作DOM行为是频繁的,而Vue利用虚拟DOM的技术,大大提高了更新DOM时的性能
  • 3.Vue中不倡导直接操作DOM,开发者只需要把大部分精力放在数据层面上
  • 4.Vue集成的一些库,大大提高开发效率,比如Vuex,Router等

6. Vue的作者是谁?大声说出它的名字!!!

他的名字就是:鱿鱼西

永恒钻石

7. 为什么data是个函数并且返回一个对象呢?

data之所以只一个函数,是因为一个组件可能会多处调用,而每一次调用就会执行data函数并返回新的数据对象,这样,可以避免多处调用之间的数据污染

8. 使用过哪些Vue的修饰符呢?

可以看我这篇文章「百毒不侵」面试官最喜欢问的13种Vue修饰符

9. 使用过哪些Vue的内部指令呢?

10. 组件之间的传值方式有哪些?

  • 父组件传值给子组件,子组件使用props进行接收
  • 子组件传值给父组件,子组件使用$emit+事件对父组件进行传值
  • 组件中可以使用$parent$children获取到父组件实例和子组件实例,进而获取数据
  • 使用$attrs$listeners,在对一些组件进行二次封装时可以方便传值,例如A->B->C
  • 使用$refs获取组件实例,进而获取数据
  • 使用Vuex进行状态管理
  • 使用eventBus进行跨组件触发事件,进而传递数据
  • 使用provideinject,官方建议我们不要用这个,我在看ElementUI源码时发现大量使用
  • 使用浏览器本地缓存,例如localStorage

11. 路由有哪些模式呢?又有什么不同呢?

  • hash模式:通过#号后面的内容的更改,触发hashchange事件,实现路由切换
  • history模式:通过pushStatereplaceState切换url,触发popstate事件,实现路由切换,需要后端配合

12. 如何设置动态class,动态style?

  • 动态class对象:<div :class="{ 'is-active': true, 'red': isRed }"></div>
  • 动态class数组:<div :class="['is-active', isRed ? 'red' : '' ]"></div>
  • 动态style对象:<div :style="{ color: textColor, fontSize: '18px' }"></div>
  • 动态style数组:<div :style="[{ color: textColor, fontSize: '18px' }, { fontWeight: '300' }]"></div>

13. v-if和v-show有何区别?

  • 1.v-if是通过控制dom元素的删除和生成来实现显隐,每一次显隐都会使组件重新跑一遍生命周期,因为显隐决定了组件的生成和销毁
  • 2.v-show是通过控制dom元素的css样式来实现显隐,不会销毁
  • 3.频繁或者大数量显隐使用v-show,否则使用v-if

14. computed和watch有何区别?

  • 1.computed是依赖已有的变量来计算一个目标变量,大多数情况都是多个变量凑在一起计算出一个变量,并且computed具有缓存机制,依赖值不变的情况下其会直接读取缓存进行复用,computed不能进行异步操作
  • 2.watch是监听某一个变量的变化,并执行相应的回调函数,通常是一个变量的变化决定多个变量的变化,watch可以进行异步操作
  • 3.简单记就是:一般情况下computed多对一watch一对多

15. Vue的生命周期,讲一讲?

16. 为什么v-if和v-for不建议用在同一标签?

在Vue2中,v-for优先级是高于v-if的,咱们来看例子

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

上面的写法是v-forv-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)}}
复制代码

17. vuex的有哪些属性?用处是什么?

  • State:定义了应用状态的数据结构,可以在这里设置默认的初始状态。
  • Getter:允许组件从 Store 中获取数据,mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性。
  • Mutation:是唯一更改 store 中状态的方法,且必须是同步函数。
  • Action:用于提交 mutation,而不是直接变更状态,可以包含任意异步操作。
  • Module:允许将单一的 Store 拆分为多个 store 且同时保存在单一的状态树中。

至尊星耀

18. 不需要响应式的数据应该怎么处理?

在我们的Vue开发中,会有一些数据,从始至终都未曾改变过,这种死数据,既然不改变,那也就不需要对他做响应式处理了,不然只会做一些无用功消耗性能,比如一些写死的下拉框,写死的表格数据,这些数据量大的死数据,如果都进行响应式处理,那会消耗大量性能。

// 方法一:将数据定义在data之外
data () {this.list1 = { xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx }this.list2 = { xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx }this.list3 = { xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx }this.list4 = { xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx }this.list5 = { xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx }return {}}// 方法二:Object.freeze()
data () {return {list1: Object.freeze({xxxxxxxxxxxxxxxxxxxxxxxx}),list2: Object.freeze({xxxxxxxxxxxxxxxxxxxxxxxx}),list3: Object.freeze({xxxxxxxxxxxxxxxxxxxxxxxx}),list4: Object.freeze({xxxxxxxxxxxxxxxxxxxxxxxx}),list5: Object.freeze({xxxxxxxxxxxxxxxxxxxxxxxx}),}}
复制代码

19. watch有哪些属性,分别有什么用?

当我们监听一个基本数据类型时:

watch: {value () {// do something}
}
复制代码

当我们监听一个引用数据类型时:

watch: {obj: {handler () { // 执行回调// do something},deep: true, // 是否进行深度监听immediate: true // 是否初始执行handler函数}
}
复制代码

20. 父子组件生命周期顺序

父beforeCreate -> 父created -> 父beforeMount -> 子beforeCreate -> 子created -> 子beforeMount -> 子mounted -> 父mounted

21. 对象新属性无法更新视图,删除属性无法更新视图,为什么?怎么办?

  • 原因:Object.defineProperty没有对对象的新属性进行属性劫持
  • 对象新属性无法更新视图:使用Vue.$set(obj, key, value),组件中this.$set(obj, key, value)
  • 删除属性无法更新视图:使用Vue.$delete(obj, key),组件中this.$delete(obj, key)

22. 直接arr[index] = xxx无法更新视图怎么办?为什么?怎么办?

  • 原因:Vue没有对数组进行Object.defineProperty的属性劫持,所以直接arr[index] = xxx是无法更新视图的
  • 使用数组的splice方法,arr.splice(index, 1, item)
  • 使用Vue.$set(arr, index, value)

23. 自定义指令

建议看这篇文章8个非常实用的Vue自定义指令

24. 插槽的使用以及原理?

建议看我这篇文章「Vue源码学习」你真的知道插槽Slot是怎么“插”的吗

25. 为什么不建议用index做key,为什么不建议用随机数做key?

举个例子:

<div v-for="(item, index) in list" :key="index">{{item.name}}</div>list: [{ name: '小明', id: '123' },{ name: '小红', id: '124' },{ name: '小花', id: '125' }
]渲染为
<div key="0">小明</div>
<div key="1">小红</div>
<div key="2">小花</div>现在我执行 list.unshift({ name: '小林', id: '122' })渲染为
<div key="0">小林</div>
<div key="1">小明</div>
<div key="2">小红</div>
<div key="3">小花</div>新旧对比<div key="0">小明</div>  <div key="0">小林</div>
<div key="1">小红</div>  <div key="1">小明</div>
<div key="2">小花</div>  <div key="2">小红</div><div key="3">小花</div>可以看出,如果用index做key的话,其实是更新了原有的三项,并新增了小花,虽然达到了渲染目的,但是损耗性能现在我们使用id来做key,渲染为<div key="123">小明</div>
<div key="124">小红</div>
<div key="125">小花</div>现在我执行 list.unshift({ name: '小林', id: '122' }),渲染为<div key="122">小林</div>
<div key="123">小明</div>
<div key="124">小红</div>
<div key="125">小花</div>新旧对比<div key="122">小林</div>
<div key="123">小明</div>  <div key="123">小明</div>
<div key="124">小红</div>  <div key="124">小红</div>
<div key="125">小花</div>  <div key="125">小花</div>可以看出,原有的三项都不变,只是新增了小林这个人,这才是最理想的结果
复制代码

index和用随机数都是同理,随机数每次都在变,做不到专一性,很渣男,也很消耗性能,所以,拒绝渣男,选择老实人

26. 说说nextTick的用处?

我举个例子,在vue中:

this.name = '林三心'
this.age = 18
this.gender = '男'
复制代码

我们修改了三个变量,那问题来了,是每修改一次,DOM就更新一次吗?不是的,Vue采用的是异步更新的策略,通俗点说就是,同一事件循环内多次修改,会统一进行一次视图更新,这样才能节省性能嘛

看懂了上面,那你应该也看得懂下面的例子了吧:

<div ref="testDiv">{{name}}</div>name: '小林'this.name = '林三心'
console.log(this.$refs.testDiv.innerHTML) // 这里是啥呢
复制代码

答案是“小林”,前面说了,Vue是异步更新,所以数据一更新,视图却还没更新,所以拿到的还是上一次的旧视图数据,那么想要拿到最新视图数据怎么办呢?

this.name = '林三心'
this.$nextTick(() => {console.log(this.$refs.testDiv.innerHTML) // 林三心
})
复制代码

27. Vue的SSR是什么?有什么好处?

  • SSR就是服务端渲染
  • 基于nodejs serve服务环境开发,所有html代码在服务端渲染
  • 数据返回给前端,然后前端进行“激活”,即可成为浏览器识别的html代码
  • SSR首次加载更快,有更好的用户体验,有更好的seo优化,因为爬虫能看到整个页面的内容,如果是vue项目,由于数据还要经过解析,这就造成爬虫并不会等待你的数据加载完成,所以其实Vue项目的seo体验并不是很好

最强王者

28. Vue响应式是怎么实现的?

整体思路是数据劫持+观察者模式

对象内部通过 defineReactive 方法,使用 Object.defineProperty 将属性进行劫持(只会劫持已经存在的属性),数组则是通过重写数组方法来实现。当页面使用对应属性时,每个属性都拥有自己的dep属性,存放他所依赖的 watcher(依赖收集),当属性变化后会通知自己对应的 watcher 去更新(派发更新)。

想详细了解过程,建议阅读我的Vue源码解析系列

const { arrayMethods } = require('./array')class Observer {constructor(value) {Object.defineProperty(value, '__ob__', {value: this,enumerable: false,writable: true,configurable: true})if(Array.isArray(value)) {value.__proto__ = arrayMethodsthis.observeArray(value)} else {this.walk(value)}}walk(data) {let keys = Object.keys(data)for(let i = 0; i < keys.length; i++) {const key = keys[i]const value = data[key]defineReactive(data, key, value)}}observeArray(items) {for(let i = 0; i < items.length; i++) {observe(items[i])}}
}function defineReactive(data, key, value) {const childOb = observe(value)const dep = new Dep()Object.defineProperty(data, key, {get() {console.log('获取值')if (Dep.target) {dep.depend()if (childOb) {childOb.dep.depend()if (Array.isArray(value)) {dependArray(value)}}}return value},set(newVal) {if (newVal === value) returnobserve(newVal)value = newValdep.notify()}})
}function observe(value) {if (Object.prototype.toString.call(value) === '[object Object]' || Array.isArray(value)) {return new Observer(value)}
}function dependArray(value) {for(let e, i = 0, l = value.length; i < l; i++) {e = value[i]e && e.__ob__ && e.__ob__.dep.depend()if (Array.isArray(e)) {dependArray(e)}}
}// array.js
const arrayProto = Array.prototypeconst arrayMethods = Object.create(arrayProto)const methodsToPatch = ['push','pop','shift','unshift','splice','reverse','sort'
]methodsToPatch.forEach(method => {arrayMethods[method] = function (...args) {const result = arrayProto[method].apply(this, args)const ob = this.__ob__var insertedswitch (method) {case 'push':case 'unshift':inserted = argsbreak;case 'splice':inserted = args.slice(2)default:break;}if (inserted) ob.observeArray(inserted)ob.dep.notify()return result}
})复制代码

29. 为什么只对对象劫持,而要对数组进行方法重写?

因为对象最多也就几十个属性,拦截起来数量不多,但是数组可能会有几百几千项,拦截起来非常耗性能,所以直接重写数组原型上的方法,是比较节省性能的方案

30. Vue的模板编译原理?

因为这个问题讲起来可能比较长,所以:

建议看我这篇「Vue源码学习(二)」你不知道的-模板编译原理

31. Vue的computed和watch的原理?

因为这个问题讲起来可能比较长,所以:

建议看我这篇「Vue源码学习(四)」立志写一篇人人都看的懂的computed,watch原理

32. Vue.set方法的原理?

function set(target, key, val) {// 判断是否是数组if (Array.isArray(target)) {// 判断谁大谁小target.length = Math.max(target.length, key)// 执行splicetarget.splice(key, 1, val)return val}const ob = target.__ob__// 如果此对象没有不是响应式对象,直接设置并返回if (key in target && !(key in target.prototype) || !ob) {target[key] = valreturn val}// 否则,新增属性,并响应式处理defineReactive(target, key, val)return val
}
复制代码

33. Vue.delete方法的原理?

function del (target, key) {// 判断是否为数组if (Array.isArray(target)) {// 执行splicetarget.splice(key, 1)return}const ob = target.__ob__// 对象本身就没有这个属性,直接返回if (!(key in target)) return// 否则,删除这个属性delete target[key]// 判断是否是响应式对象,不是的话,直接返回if (!ob) return// 是的话,删除后要通知视图更新ob.dep.notify()
}
复制代码

34. nextTick的原理?

let callbacks = []; //回调函数
let pending = false;
function flushCallbacks() {pending = false; //把标志还原为false// 依次执行回调for (let i = 0; i < callbacks.length; i++) {callbacks[i]();}
}
let timerFunc; //先采用微任务并按照优先级优雅降级的方式实现异步刷新
if (typeof Promise !== "undefined") {// 如果支持promiseconst p = Promise.resolve();timerFunc = () => {p.then(flushCallbacks);};
} else if (typeof MutationObserver !== "undefined") {// MutationObserver 主要是监听dom变化 也是一个异步方法let counter = 1;const observer = new MutationObserver(flushCallbacks);const textNode = document.createTextNode(String(counter));observer.observe(textNode, {characterData: true,});timerFunc = () => {counter = (counter + 1) % 2;textNode.data = String(counter);};
} else if (typeof setImmediate !== "undefined") {// 如果前面都不支持 判断setImmediatetimerFunc = () => {setImmediate(flushCallbacks);};
} else {// 最后降级采用setTimeouttimerFunc = () => {setTimeout(flushCallbacks, 0);};
}export function nextTick(cb) {callbacks.push(cb);if (!pending) {pending = true;timerFunc();}
}
复制代码

35. key有什么用?说说diff算法吧?

直接看这篇吧:为什么 Vue 中不要用 index 作为 key?(diff 算法详解)

我讲的没他好

冷门的知识点

36. 如果子组件改变props里的数据会发生什么

  • 改变的props数据是基本类型

如果修改的是基本类型,则会报错

props: {num: Number,}
created() {this.num = 999}
复制代码

  • 改变的props数据是引用类型
props: {item: {default: () => {},}}
created() {// 不报错,并且父级数据会跟着变this.item.name = 'sanxin';// 会报错,跟基础类型报错一样this.item = 'sss'},
复制代码

37. props怎么自定义验证

props: {num: {default: 1,validator: function (value) {// 返回值为true则验证不通过,报错return [1, 2, 3, 4, 5].indexOf(value) !== -1}}}
复制代码

38. watch的immediate属性有什么用?

比如平时created时要请求一次数据,并且当搜索值改变,也要请求数据,我们会这么写:

created(){this.getList()
},
watch: {searchInputValue(){this.getList()}
}
复制代码

使用immediate完全可以这么写,当它为true时,会初始执行一次

watch: {searchInputValue:{handler: 'getList',immediate: true}
}
复制代码

39. 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;},},}
复制代码

40. 审查元素时发现data-v-xxxxx,这是啥?

这是在标记vue文件中css时使用scoped标记产生的,因为要保证各文件中的css不相互影响,给每个component都做了唯一的标记,所以每引入一个component就会出现一个新的'data-v-xxx'标记

41. computed如何实现传参?

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

42. 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(){const timer = setInterval(()=>{//具体执行代码console.log('1');},1000);this.$once('hook:beforeDestroy',()=>{clearInterval(timer);timer = null;})}}
}
复制代码
  • 7.2 父子组件使用

如果子组件需要在mounted时触发父组件的某一个函数,平时都会这么写:

//父组件
<rl-child @childMounted="childMountedHandle"
/>
method () {childMountedHandle() {// do something...}
},// 子组件
mounted () {this.$emit('childMounted')
},
复制代码

使用hook的话可以更方便:

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

43. provide和inject是响应式的吗?

// 祖先组件
provide(){return {// keyName: { name: this.name }, // value 是对象才能实现响应式,也就是引用类型keyName: this.changeValue // 通过函数的方式也可以[注意,这里是把函数作为value,而不是this.changeValue()]// keyName: 'test' value 如果是基本类型,就无法实现响应式}},
data(){return {name:'张三'
}},methods: {changeValue(){this.name = '改变后的名字-李四'}}  // 后代组件inject:['keyName']create(){console.log(this.keyName) // 改变后的名字-李四
}
复制代码

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

比如下面这种情况,Vue会渲染到哪个节点上

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

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

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

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

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

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

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

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

<template><router-view :key="$route.path"></router-view>
</template>
复制代码

47. 自定义v-model

默认情况下,v-model 是 @input 事件侦听器和 :value 属性上的语法糖。但是,你可以在你的Vue组件中指定一个模型属性来定义使用什么事件和value属性——非常棒!

export default: {model: {event: 'change',prop: 'checked'  }
}
复制代码

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

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

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

49.为什么不建议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)}}
复制代码

50.计算变量时,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都没变。

作者:Sunshine_Lin
链接:https://juejin.cn/post/6984210440276410399
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

vue由浅入深的50个知识点相关推荐

  1. Vue的50个知识点

    Vue的50个知识点 文章目录 Vue的50个知识点 1. Vue的优点?Vue的缺点? 2.为什么说Vue是一个渐进式框架? 3.Vue和Rect的异同点? 4.MVVM是什么?和MVC有什么区别呢 ...

  2. 重点| 系统集成项目管理工程师考前50个知识点(5)

    本文章总结了系统集成项目管理工程师考试背记50个知识点!!! 帮助大家更好的复习,希望能对大家有所帮助 比较长,放了部分,需要可私信!! 30.活动之间的四种依赖关系: 强制性依赖关系:是法律或合同要 ...

  3. 字节跳动内部资料泄露?音视频开发教程(附面试题+视频教程),全文共301页,包含50个知识点

    前言 男怕入错行,女怕嫁错郎,程序员技术贬值快,只有紧紧跟上行业人才需求的风口才能不断让自己保值增值.唯有不断学习更新迭代自身技能的程序员才能一直在这个行业站稳脚跟. 为什么音视频如此重要? 伴随着短 ...

  4. vue sleep_vue不常用的知识点的整理

    作者:小城听风雨 https://blog.csdn.net/a5252145/article/details/107316953 v-cloak 使用 v-cloak 指令可以有效解决屏幕闪动. 有 ...

  5. 学网络必备50个知识点

    学习网络必备50个必备知识点,从六个方面展开: 文章目录 一.设备通用类: 二.内网部署类: 三.外网路由类: 四.无线类: 五.出口类: 六.云服务器类: 一.设备通用类: 1.设备名称(hostn ...

  6. 前端vue视频vue-video-player插件总结知识点案例(带源码)

    目录 文档 安装 main.js文件全局引入 视频格式 组件方法 切换视频清晰度 基础案例 效果如下 完整案例1 效果如下 完整案例2 效果如下 最后 文档 文档地址 选项参考 API文档 配置函数方 ...

  7. 【Vue系列】Vue3.0知识点汇总整理

    目录 一.Vue3简介 1.Vue3带来了什么? 二.创建Vue3工程 1.使用vue-cli创建 2.使用vite创建 补充:分析Vue3的工程结构 三.常用Composition API 1.初识 ...

  8. Vue初学者需要掌握的知识点及案例

    什么是Vue 前端框架的三大马车(按时间顺序): angular 谷歌公司 m(数据) v(视图) c(控制器) 双向数据绑定 react facebook 视图层的框架view 虚拟dom vue ...

  9. Vue2 必备的50个知识点

    单页面路由 数据与视图分开 缺点: 单页面不利于seo 不兼容IE 首屏加载时间长 2.为什么说Vue是一个渐进式框架? Vue的全家桶,你可以选择不用,或者只选几样去用,比如不用vuex 3.Vue ...

最新文章

  1. python3 字符串操作总结
  2. 基于Struts2的供求信息网设计(二)
  3. mysql hadoop架构,Debezium实现Mysql到Elasticsearch高效实时同步
  4. 【深度学习】深入理解卷积神经网络(CNN)
  5. drf5 版本和认证组件
  6. WiresShark之抓http包如何倒出图片格式的对象
  7. js防篡改对象之冻结对象
  8. linux下使用ThinkPHP注意大小写问题
  9. sklearn 使用joblib保存模型,并解决cannot import name joblib from sklearn.externals报错
  10. eclise,myeclise,sts 打叉但是没提示解决办法
  11. enum类型的标签内容根据语言的取法
  12. WINDOWS登录系统之前(欢迎界面)运行指定程序脚本服务
  13. Eclipse,新建web项目后 出现jax-ws webservice
  14. 京东风格的移动端Vue组件库NutUI2.0来啦
  15. Android 10.0强制所有app横屏显示
  16. 如何新建一个ccs工程文件
  17. 用天翎低代码做办公协同软件,简单高效
  18. Zeromq 学习笔记1
  19. 硬盘数据丢失了怎么恢复?数据恢复对策在这
  20. CPU100%,怎么快速定位?

热门文章

  1. AVI转换成MP4格式的教程方法集合
  2. 未来属于无代码分析:每个人都能成为数据科学家
  3. Linux运维面试中常被问到的两个shell脚本
  4. 小霸王游戏机珍藏84合1 绿色中文硬盘版
  5. iPhone解锁屏幕密码
  6. 一些引起我共鸣的素材
  7. matlab技巧操作之颜色阈值
  8. CodeChef Chef and Digit Jumps 题解
  9. 「关羽斩废」! 垃圾处理与发电参加「护家担当」概念雄安跨界斜杠派展区!AiHiX
  10. 解决 VUE history模式 后端配置 微信支付目录限制5个 等问题