当前位置: 首页 > Web前端 > vue.js

Vue基础_2

时间:2023-03-31 17:52:56 vue.js

1.MVC模型(Model-View-Controller)(1)model就是模型,负责接受来自controller的请求并返回数据(2)View就是view,就是用户看到的交互界面(3)controller是接受用户输入并调用模型和视图以满足用户需求的控制器,负责接受请求并选择调用哪个模型来处理请求。(4)优秀的单体:多个视图可以共享一个模型(5)缺点:部分视图与控制器密切相关,不利于视图或控制器的独立复用。2.MVVM模型(Model-View-ViewModel)设计这个模型的初衷是:关注Model的变化,让MVVM框架自动更新DOM的状态,让开发者从繁琐的DOM中解放出来操作。M是数据,V是视图。ViewModel通过双向数据绑定连接Model和View,专门从事数据分析。Vue是一套基于MVVM模型的框架,Model是JS数组、对象等数据部分,View是页面视图部分,ViewModel是指Vue的实例化对象。3、Vue的生命周期每个Vue实例都有一个从创建到销毁的过程。这个过程就是Vue的生命周期。Vue的生命周期有几个阶段,Vue也提供了钩子函数供我们在Vue生命周期的不同阶段运行(以Vue属性的形式添加,不能使用箭头函数,涉及到)(1)beforeCreate:就在实例被创建之后,数据和方法还没有被初始化。(2)create:数据和方法初始化后,mount阶段开始前,模板编译还没有开始(3)beforeMount:mount阶段开始时,模板已经编译,还没有放到页面中(无法访问真正的DOM结构)(4)mounted:已经挂载到指定的容器中。(vm.$el已经创建,可以访问真实DOM结构)(5)beforeUpdate:数据更新(6)updated:数据更新(7)beforeDestroy:实例销毁前(8)destroy:实例销毁后4、Vue条件渲染(1)v-if:用于有条件地渲染一段内容,如果v-if表达式的值为false,则不渲染该内容。也试试模板标签。使用v-if进行渲染切换非常昂贵。(2)v-show:始终渲染指定的内容。如果v-show的表达式为false,内容依然渲染,但是display是none,但是对template标签不适用(template标签的内容仍然显示在页面上面,没有template后台DOM中的标签)只有v-show的初始渲染开销较高。给组件绑定条件渲染时,如果是v-if,切换时会触发mounted,如果是v-show,则不会(可以使用keep-alive,让v绑定的组件切换-if不会触发mounted)5.vue列表渲染(1)v-for可以渲染一个数组,格式:v-for="item,items中的index"(index可以省略,items是vue中声明的数组instance),操作数据时,不要直接使用下标,而是使用pop/push/splice/shift/sort/slice/reverse这七种方法或者直接改变数组,或者使用set方法:Vue.set(vm.arr,index,value)或vm.$set(vm.arr,index,value)。(2)v-for也可以渲染一个对象,格式:v-for="value,key,indexinobject"(key,index可以省略,object是在vue实例中声明的对象),直接给一个对象属性修改可以实时显示,但是直接增加或删除对象属性不会更新显示。(要直接改引用,或者用Vue.set(vm.obj,"key",value)或vm.$set(vm.obj,"key",value)方法)(3)添加时增加,删除或者切换列表的顺序性能,往往会为每个item提供一个唯一的key属性,可以在渲染数组的时候绑定index:v-bind:key="index",可以绑定key(健康值)渲染对象时:v-bind:key="key"。6、Vue的模板语法:(1)插值表达式{{}},只接受表达式(加法、减法、三元等),不接受语句(赋值、判断等)(2)v-text:

(与{{}}一样,只是将变量值显示为文本)(3)v-html:
(显示variablevalueashtmlformat)7.Computedattribute:vue属性中的computed属性,computed属性自带缓存机制,当computed属性涉及的变量没有发生变化时,不会重新计算它的值。在日期属性中,日期的值不能是多个日期变量的运算。如果要求几个变量的和,可以使用methods定义的函数(在插值表达式中加入()来执行),computed定义的函数也可以,是否在插值中加入()表达与否。计算属性有一个get属性和一个set属性。fullname所依赖的name1和name2发生变化时更新get属性。set(x)是获取变化的x,在fullname变化时执行set函数。8.monitor属性:vue属性中的watch属性是function的形式,类似于computed,但是只能监听一个变量。9.Vue使用v-if进行条件渲染和DOM切换时,会复用DOM元素(可以设置key="aaa"绑定元素唯一标识,不会复用10.Vue的参考资料:ref有的时候不得不用vue来操作DOM,需要绑定一个带有ref="div1"的div,然后用this.$refs.div1获取DOM节点,如果这个div换成组件的话,那么这个节点就可以直接引用子组件的属性了10.vue父子组件传值,父组件可以通过v-bind绑定一个属性将值传给子组件,然后使用props属性在子组件中接受这个属性(子组件不要随便改变父组件的值,如果要改变就复制一份,然后修改复制);子组件可以给父组件传值组件通过触发自定义事件(this.$emit(“mythings”),x,y),可以传多个值在活动中编辑。11、Vue非父子组件前传值:(1)vuex(2)bus使用总线,给所有Vue原型绑定一个bus总线。通过向这个总线传递事件和监听事件,可以实现非父子组件之间传值的效果。12.vue原生事件和自定义事件:vue组件绑定的监听事件始终是自定义事件,其实就是点击,即使点击也不会触发该功能,.native修饰符的使用可以将这个事件转化为原生事件,点击时触发函数。本机绑定到HTML的事件通常是本机事件。12.Vueforminputtype=radio,checkbox,select,textselect(option)textarea13.投币口;当一个组件有一个定义好的template模板时,如果你想在外部调用这个组件,你也可以在里面嵌套一些组件。您可以使用插槽。14、组件命名和组件监控事件名称:最好用破折号连接。15、(1)vue直接导入element-ui组件改变样式,所以要在自定义类前面加上“<<<”。(2)Vue空间:一个汉字宽度:半个汉字宽度:16、Vue双向绑定v-modelVue主要通过Object.defineProperty()实现数据劫持,Object接受三个参数,第一个是对象,第二个是第二个是对象的属性,第三个是配置对象。有get、set等属性,get:调用此对象的属性时的返回值,属性变化时set的回调函数。defineProperty添加的属性是不可枚举的(不会出现obj中的letk),但是打印对象会出现。以input为例,实现双向绑定:监听input,当数据发生变化时,同步修改为自定义对象的某个属性中,对该属性进行数据劫持。当此属性更改时,将触发设置。通过set中的方法,实现数据同步更新视图,实现Vue数据劫持:17.Vue路由(1)路由的实现原理:路由最初是由后端提出的,根据不同的路由返回不同的页面,而vue路由可以通过改变url来更新视图页面而不刷新。(1)哈希方式:哈希值为#/和URL中后面的东西。虽然它出现在URL中,但不会包含在HTTP请求中。它对后端没有影响,仅用于指定浏览器操作,所以页面不会被刷新。(兼容性好)因为hash只能修改#后面的内容,所以use只能设置同一个文档的当前URL(2)History模式:在HTML5的History接口中使用新的pushState和replaceState方法(添加一条历史记录,修改当前历史)新的URL集合可以是任意一个与当前URL同源的URL。(2)$route和$router的区别(1)$router是VueRouter的一个实例,相当于一个全局的路由器对象。您可以使用$router.push、replace、go等方法导航到不同的URL。它可以用来控制路由的去向。(2)$route是当前重定向到的路由的路由信息??对象,在其中可以获取name、meta、path等属性(3)params和query:parmas更类似于post请求,通过name导入,并且请求的参数不会显示在地址栏中,而是通过路径引入查询,请求的参数会显示在地址栏中18、vuex(1)vuex的实现原理;为每个vue实例添加一个vuex.store实例,并存储state、getter、action、mutation相关数据,通过调用action和mutation修改state中的值,通过vue的响应式监控状态数据(二)核心概念①状态:是共享数据的存放处,内部如果数据发生变化,依赖于这个数据的组件也会随之更新。②getter:是store中计算出来的属性。它将缓存计算结果。只有当它的依赖发生变化时,才会重新计算,否则直接返回这个缓存的值。③mutation:执行同步操作,常用于改变状态数据④action:执行异步操作,可用于commit执行一个mutation操作⑤module:将store分成模块,使项目结构更加清晰。19.语法糖.sync将扩展为bar=val">20.单页和多页应用的比较(1)单页(SPA)只有一个shell页和多个页片,每次跳转只刷新本地资源。JS、CSS等资源是公共的(只需要在shell中部分加载)用户体验好,页面碎片之间的切换也比较快(2)多页面(MPA)由多个完整的页面组成,并且每次跳转都需要刷新所有资源,页面加载慢,用户体验不好21.VirtualDOM:(1)原理:改变一个真实的DOM比改变一个JS对象代价高得多。虚拟DOM是JS对象到真实DOM的映射。当元素的状态需要改变时,会创建一个新的虚拟DOM,然后计算与旧虚拟DOM的差异,并将其应用到真实DOM中。(2)功能:用于提高页面的渲染速度(3)diff算法:利用JS生成虚拟VDOM树,但是当元素发生变化时,生成新的虚拟newVDOM,然后用VDOM和newVDOM进行比较(只在同一个Level中进行比较),直接在真实DOM上修改差异。https://www.cnblogs.com/dojo-...(4)VDOM和newVDOM比较算法:分别给vDOM和newVDOM一个头指针和一个尾指针,然后两两比较(共四种),如果相等,将真实DOM中对应的节点移动到Vnode中指定的位置。如果不相等,则依次遍历oldChild、newVOM头指针与其匹配,如果不相等,则直接将newVDOM插入真实DOM节点中vDOM头指针所在的位置。22、vue3.0的新特性(1)节点被标记,分为动态节点(如{{a}})和静态节点。每次更新DOM,都会跳过静态节点,直接定位动态节点,提高了效率(2)为节点监听事件设置缓存(3)使用Proxy实现响应式,而不是object.defineProperty①的定义defineProperty:添加或删除属性无法监控;不支持class、array、map等类型②Proxy原理:使用ES6proxy代理,拦截对数据的一系列操作。代理在目标对象的外层建立了一层拦截,对目标对象的某些操作必须经过这一层拦截。③模板不需要用div包裹,即不需要只有一个根节点,可以并列多个标签(节点)。