网站开发整合编辑器网站等级保护测评必须做吗

张小明 2026/1/11 11:28:21
网站开发整合编辑器,网站等级保护测评必须做吗,支付的网站建设费整么做账,青岛专业网站营销来源 | https://segmentfault.com/a/1190000021936876 今天这篇文章给大家分享一些常见的前端vue面试题。有一定的参考价值#xff0c;有需要的朋友可以参考一下#xff0c;希望对大家有所帮助。 对于前端来说#xff0c;尽管css、html、js是主要的基础知识#xff0c;但…来源 | https://segmentfault.com/a/1190000021936876今天这篇文章给大家分享一些常见的前端vue面试题。有一定的参考价值有需要的朋友可以参考一下希望对大家有所帮助。对于前端来说尽管css、html、js是主要的基础知识但是随着技术的不断发展出现了很多优秀的mv*框架以及小程序框架。因此对于前端开发者而言需要对一些前端框架进行熟练掌握。这篇文章我们一起来聊一聊VUE及全家桶的常见面试问题。1、请讲述下VUE的MVVM的理解MVVM 是 Model-View-ViewModel的缩写即将数据模型与数据表现层通过数据驱动进行分离从而只需要关系数据模型的开发而不需要考虑页面的表现具体说来如下Model代表数据模型主要用于定义数据和操作的业务逻辑。View代表页面展示组件即dom展现形式负责将数据模型转化成UI 展现出来。ViewModel为model和view之间的桥梁监听模型数据的改变和控制视图行为、处理用户交互。通过双向数据绑定把 View 层和 Model 层连接了起来而View 和 Model 之间的同步工作完全是自动的无需人为干涉在MVVM架构下View 和 Model 之间并没有直接的联系而是通过ViewModel进行交互Model 和 ViewModel 之间的交互是双向的 因此View 数据的变化会同步到Model中而Model 数据的变化也会立即反应到View 上。2、VUE的生命周期及理解答总共分为8个阶段具体为创建前/后载入前/后更新前/后销毁前/后。创建前/后 在beforeCreated阶段ue实例的挂载元素e l 和数据对象 d a t a 都为 u n d e f i n e d 还未初始化在 c r e a t e d 阶段 v u e 实例的数据对象 d a t a 有了 el和数据对象data都为undefined还未初始化在created阶段vue实例的数据对象data有了el和数据对象data都为undefined还未初始化在created阶段vue实例的数据对象data有了el还没有。载入前/后在beforeMount阶段vue实例的$el和data都初始化了但还是挂载之前为虚拟的dom节点data.message还未替换在mounted阶段vue实例挂载完成data.message成功渲染。更新前/后当data变化时会触发beforeUpdate和updated方法。**销毁前/后**在执行destroy方法后对data的改变不会再触发周期函数说明此时vue实例已经解除了事件监听以及和dom的绑定但是dom结构依然存在。具体讲解及应用**beforeCreate**在new一个vue实例后只有一些默认的生命周期钩子和默认事件其他的东西都还没创建data和methods中的数据都还没有初始化。不能在这个阶段使用data中的数据和methods中的方法**create**data 和 methods都已经被初始化好了如果要调用 methods 中的方法或者操作 data 中的数据最早可以在这个阶段中操作**beforeMount**执行到这个钩子的时候在内存中已经编译好了模板了但是还没有挂载到页面中此时页面还是旧的不能直接操作页面的dom和获取dom对象**mounted**执行到这个钩子的时候就表示Vue实例已经初始化完成了。此时组件脱离了创建阶段进入到了运行阶段。如果我们想要通过插件操作页面上的DOM节点最早可以在和这个阶段中进行beforeUpdate当执行这个钩子时页面中的显示的数据还是旧的data中的数据是更新后的页面还没有和最新的数据保持同步**updated**页面显示的数据和data中的数据已经保持同步了都是最新的**beforeDestory**Vue实例从运行阶段进入到了销毁阶段这个时候上所有的data和 methods、指令、过滤器 ……都是处于可用状态。还没有真正被销毁destroyed这个时候上所有的data和methods、指令、过滤器 ……都是处于不可用状态。组件已经被销毁了。3、v-if和v-show的区别**共同点**都能控制元素的显示和隐藏**不同点**实现本质方法不同v-show本质就是通过控制css中的display设置为none控制隐藏只会编译一次v-if是动态的向DOM树内添加或者删除DOM元素若初始值为false就不会编译了。而且v-if不停的销毁和创建比较消耗性能。如果要频繁切换某节点使用v-show(切换开销比较小初始开销较大)。如果不需要频繁切换某节点使用v-if初始渲染开销较小切换开销比较大。4、v-if和v-for同时使用在同一个标签上的表现当v-if与v-for一起使用时v-for具有比v-if更高的优先级这意味着v-if将分别重复运行于每个v-for循环中。所以不推荐v-if和v-for同时使用。如果v-if和v-for一起用的话vue中的的会自动提示v-if应该放到外层去5、v-for中的key的理解需要使用key来给每个节点做一个唯一标识Diff算法就可以正确的识别此节点。主要是为了高效的更新虚拟DOM。6、vue中transition的理解1定义transition时需要设置对应的name具体语法为需要动画的内容或者组件或者页面2过渡动画主要包含6个class分别为v-enter定义元素进入过渡的初始状态在元素插入前生效插入后一帧删除v-enter-active在元素插入前生效在动画完成后删除v-enter-to在元素插入后一帧生效在动画完成后删除v-leave离开过渡的初始状态在元素离开时生效下一帧删除v-leave-active在离开过渡时生效在动画完成后删除v-leave-to离开过渡结束状态在离开过渡下一帧生效在动画完成后删除⚠️v会转化为对应的transition的name值3当然我们也可以自定义这六个class 可以直接在transition中设置对应的属性为对应的class名称属性有enter-classenter-active-classenter-to-classleave-classleave-active-classleave-to-class4在同时使用过渡和css动画的时候 可以设置type属性来制定vue内部机制监听transitioned或者animationed事件来完成过渡还是动画的监听5如果需要设置对应的过渡时间可以直接设置属性duration可以直接接收一个数字单位为毫秒也可以接收一个对象{enter:1000,leave:300}6也可以设置过渡的钩子函数具体有before-enterenterafter-enterenter-cancelledbefore-leaveleaveafter-leaveleave-cancelled7、vue的自定义指令自定义指令分为全局指令和组件指令其中全局指令需要使用directive来进行定义组件指令需要使用directives来进行定义具体定义方法同过滤器filter或者其他生命周期具体使用方法如下全局自定义指令 directive(name,{})其中name表示定义的指令名称定义指令的时候不需要带v-但是在调用的时候需要哦带v-第二个参数是一个对象对象中包括五个自定义组件的钩子函数具体包括bind函数只调用一次指令第一次绑定在元素上调用即初始化调用一次inserted函数并绑定元素插入父级元素即new vue中el绑定的元素时调用此时父级元素不一定转化为了domupdate函数在元素发生更新时就会调用可以通过比较新旧的值来进行逻辑处理componentUpdated函数元素更新完成后触发一次unbind函数在元素所在的模板删除的时候就触发一次钩子函数对应的参数el,binding,vnode,oldnode,具体参数讲解如下a、el指令所绑定的元素 可以直接操组dom元素b、binding一个对象具体包括以下属性1name定义的指令名称 不包括v-2value指令的绑定值如果绑定的是一个计算式value为对应计算结果3oldvalue指令绑定元素的前一个值只对update和componentUpdated钩子函数有值4expression指令绑定的原始值 不对值进行任何加工5arg传递给指令的参数6modifiers指令修饰符如v-focus.show.async 则接收的modifiers为showtrueasynctruec、vnodevue编译生成的虚拟domd、oldVnode上一个vnode只在update和componentUpdated钩子函数中有效⚠️如果不需要其他钩子函数可以直接简写为directive(“focus”,function(el,binding){})8、vue的实现原理vue.js 是采用数据劫持结合发布者-订阅者模式的方式通过Object.defineProperty()来劫持各个属性的settergetter在数据变动时发布消息给订阅者触发相应的监听回调。具体步骤第一步需要observe的数据对象进行递归遍历包括子属性对象的属性都加上setter和getter这样的话给这个对象的某个值赋值就会触发setter那么就能监听到了数据变化第二步compile解析模板指令将模板中的变量替换成数据然后初始化渲染页面视图并将每个指令对应的节点绑定更新函数添加监听数据的订阅者一旦数据有变动收到通知更新视图第三步Watcher订阅者是Observer和Compile之间通信的桥梁主要做的事情是:1、在自身实例化时往属性订阅器(dep)里面添加自己2、自身必须有一个update()方法3、待属性变动dep.notice()通知时能调用自身的update()方法并触发Compile中绑定的回调则功成身退。第四步MVVM作为数据绑定的入口整合Observer、Compile和Watcher三者通过Observer来监听自己的model数据变化通过Compile来解析编译模板指令最终利用Watcher搭起Observer和Compile之间的通信桥梁达到数据变化 - 视图更新视图交互变化(input) - 数据model变更的双向绑定效果。9、vue的diff算法理解**1diff算法的作用**用来修改dom的一小段不会引起dom树的重绘**2diff算法的实现原理**diff算法将virtual dom的某个节点数据改变后生成的新的vnode与旧节点进行比较并替换为新的节点具体过程就是调用patch方法比较新旧节点一边比较一边给真实的dom打补丁进行替换3具体过程详解a、在采用diff算法进行新旧节点进行比较的时候比较是按照在同级进行比较的不会进行跨级比较b、当数据发生改变的时候set方法会调用dep.notify通知所有的订阅者watcher订阅者会调用patch函数给响应的dom进行打补丁从而更新真实的视图c、patch函数接受两个参数第一个是旧节点第二个是新节点首先判断两个节点是否值得比较值得比较则执行patchVnode函数不值得比较则直接将旧节点替换为新节点。如果两个节点一样就直接检查对应的子节点如果子节点不一样就说明整个子节点全部改变不再往下对比直接进行新旧节点的整体替换d、patchVnode函数找到真实的dom元素判断新旧节点是否指向同一个对象如果是就直接返回如果新旧节点都有文本节点那么直接将新的文本节点赋值给dom元素并且更新旧的节点为新的节点如果旧节点有子节点而新节点没有则直接删除dom元素中的子节点如果旧节点没有子节点新节点有子节点那么直接将新节点中的子节点更新到dom中如果两者都有子节点那么继续调用函数updateChildrene、updateChildren函数抽离出新旧节点的所有子节点并且设置新旧节点的开始指针和结束指针然后进行两辆比较从而更新dom调整顺序或者插入新的内容 结束后删掉多余的内容10、vue组件的通信父子组件和非父子组件父子组件通信传递参数可以使用props传递函数可以直接在调用子组件的时候传递自定义事件并使用$emit来调用例如//父组件 div classsparent child getinfomyname :userinfousermessage/child div export default { data(){ return { usermessage:我是父亲 } }, methods:{ myname(name){ console.log(我的名字叫name) } } } //子组件 div classschild 来源{{userinfo}} button clickgetname显示我的名字/button div export default { props:[userinfo], methods:{ getname(){ this.$emit(getinfo,bilibili) } } }兄弟组件通信首先建立一个vue实例空白页js文件import Vue from vue export default new Vue()组件a数据发送方通过使用 $emit 自定义事件把数据带过去template div spanA组件-{{msg}}/span input typebutton value把a组件数据传给b click send /div /template script import vmson from ../../../util/emptyVue export default { data(){ return { msg:{ a:111, b:222 } } }, methods:{ send:function(){ vmson.$emit(aevent,this.msg) } } } /script组件b数据接收方使用而通过 $on监听自定义事件的callback接收数据template div spanb组件,a传的的数据为-{{msg}}/span /div /template script import vmson from ../../../util/emptyVue export default { data(){ return { msg: } }, mounted(){ vmson.$on(aevent,(val){//监听事件aevent回调函数要使用箭头函数; console.log(val);//打印结果我是a组件的数据 this.msg val; }) } } /script11、vue的路由模式及区别hash模式在浏览器中符号“#”#以及#后面的字符称之为hash用window.location.hash读取特点hash虽然在URL中但不被包括在HTTP请求中用来指导浏览器动作对服务端安全无用hash不会重加载页面。history模式history采用HTML5的新特性提供了两个新方法pushStatereplaceState可以对浏览器历史记录栈进行修改以及popState事件的监听到状态变更。history 模式下前端的 URL必须和实际向后端发起请求的URL一致否则会报404错误12、vue与react、angular的比较Vue轻量级框架只关注视图层是一个构建数据的视图集合大小只有几十kb简单易学国人开发中文文档不存在语言障碍 易于理解和学习双向数据绑定保留了angular的特点在数据操作方面更为简单组件化保留了react的优点实现了html的封装和重用在构建单页面应用方面有着独特的优势视图数据结构分离使数据的更改更为简单不需要进行逻辑代码的修改只需要操作数据就能完成相关操作虚拟DOMdom操作是非常耗费性能的 不再使用原生的dom操作节点极大解放dom操作但具体操作的还是dom不过是换了另一种方式运行速度更快:相比较与react而言同样是操作虚拟dom就性能而言vue存在很大的优势。React相同点React采用特殊的JSX语法Vue.js在组件开发中也推崇编写.vue特殊文件格式对文件内容都有一些约定两者都需要编译后使用中心思想相同一切都是组件组件实例之间可以嵌套都提供合理的钩子函数可以让开发者定制化地去处理需求都不内置列数AJAXRoute等功能到核心包而是以插件的方式加载在组件开发中都支持mixins的特性。不同点React采用的Virtual DOM会对渲染出来的结果做脏检查Vue.js在模板中提供了指令过滤器等可以非常方便快捷地操作Virtual DOM。Angular相同点都支持指令内置指令和自定义指令都支持过滤器内置过滤器和自定义过滤器都支持双向数据绑定都不支持低端浏览器。不同点AngularJS的学习成本高比如增加了Dependency Injection特性而Vue.js本身提供的API都比较简单、直观在性能上AngularJS依赖对数据做脏检查所以Watcher越多越慢Vue.js使用基于依赖追踪的观察并且使用异步队列更新所有的数据都是独立触发的。13、vue-roter的钩子函数vue路由钩子大致可以分为三类:全局钩子主要包括beforeEach和aftrEach,beforeEach函数有三个参数to:router即将进入的路由对象from:当前导航即将离开的路由next:Function,进行管道中的一个钩子如果执行完了则导航的状态就是 confirmed 确认的否则为false终止导航。afterEach函数不用传next()函数这类钩子主要作用于全局,一般用来判断权限,以及以及页面丢失时候需要执行的操作,例如://使用钩子函数对路由进行权限跳转 router.beforeEach((to, from, next) { const role localStorage.getItem(ms_username); if(!role to.path ! /login){ next(/login); }else if(to.meta.permission){ // 如果是管理员权限则可进入这里只是简单的模拟管理员权限而已 role admin ? next() : next(/403); }else{ // 简单的判断IE10及以下不进入富文本编辑器该组件不兼容 if(navigator.userAgent.indexOf(MSIE) -1 to.path /editor){ Vue.prototype.$alert(vue-quill-editor组件不兼容IE10及以下浏览器 请使用更高版本的浏览器查看, 浏览器不兼容通知, { confirmButtonText: 确定 }); }else{ next(); } } })2单个路由里面的钩子主要用于写某个指定路由跳转时需要执行的逻辑3组件路由主要包括beforeRouteEnter和beforeRouteUpdate,beforeRouteLeave,这几个钩子都是写在组件里面也可以传三个参数(to,from,next),作用与前面类似.beforeRouteEnter(to, from, next) { next(vm { if ( vm.$route.meta.hasOwnProperty(auth_key) vm.$route.meta.auth_key ! ) { if (!vm.hasPermission(vm.$route.meta.auth_key)) { vm.$router.replace(/admin/noPermission) } } }) }14、vuex的使用Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态并以相应的规则保证状态以一种可预测的方式发生变化具体包括1stateVuex 使用单一状态树,即每个应用将仅仅包含一个store 实例但单一状态树和模块化并不冲突。存放的数据状态不可以直接修改里面的数据。2getterstate的计算属性类似vue的计算属性主要用来过滤一些数据。3actionactions可以理解为通过将mutations里面处里数据的方法变成可异步的处理数据的方法简单的说就是异步操作数据。view 层通过 store.dispath 来分发 action。可以异步函数调用4mutationmutations定义的方法动态修改Vuex 的 store 中的状态或数据5modules项目特别复杂的时候可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰方便管理。15、vue的filter的理解与用法1全局过滤器必须写在vue实例创建之前Vue.filter(testfilter, function (value,text) { // 返回处理后的值 return valuetext })2局部写法在组件实例对象里挂载。filters: { changemsg:(val,text)\{ return val text } }3使用方式只能使用在{{}}和v-bind中定义时第一个参数固定为预处理的数后面的数为调用时传入的参数调用时参数第一个对应定义时第二个参数依次往后类推h3 :titletest|changemsg(1234){{test|changemsg(4567)}}/h3 //多个过滤器也可以串行使用 h2{{name|filter1|filter2|filter3}}/h24vue-cli项目中注册多个全局过滤器写法//1.创建一个单独的文件定义并暴露函数对象 const filter1 function (val) { return val --1 } const filter2 function (val) { return val --2 } const filter3 function (val) { return val --3 } export default { filter1, filter2, filter3 } //2.导入main.js(在vue实例之前) import filters from ./filter/filter.js //3.循环注册过滤器 Object.keys(filters).forEach(key{ Vue.filter(key,filters[key]) })16、vue的keep-alive的理解keep-alive 是Vue内置的一个组件可以使被包含的组件保留状态或避免重新渲染页面第一次进入钩子的触发顺序:created- mounted- activated退出时触发 deactivated ,当再次进入前进或者后退时只触发activated事件挂载的方法等只执行一次的放在 mounted 中组件每次进去执行的方法放在 activated 中其有几个属性如下1include - 字符串或正则表达式只有名称匹配的组件会被缓存2exclude - 字符串或正则表达式任何名称匹配的组件都不会被缓存3include 和 exclude 的属性允许组件有条件地缓存。二者都可以用“”分隔字符串、正则表达式、数组。当使用正则或者是数组时要记得使用v-bind 。!-- 逗号分隔字符串只有组件a与b被缓存。-- keep-alive includea,b component/component /keep-alive !-- 正则表达式 (需要使用 v-bind符合匹配规则的都会被缓存) -- keep-alive :include/a|b/ component/component /keep-alive !-- Array (需要使用 v-bind被包含的都会被缓存) -- keep-alive :include[a, b] component/component /keep-alive17、如何封装一个vue组件根据业务需求建立组件的模板先把架子搭起来写写样式考虑好组件的基本逻辑。准备好组件的数据输入。即分析好逻辑定好 props 里面的数据、类型。准备好组件的数据输出。即根据组件逻辑做好要暴露出来的方法。封装完毕了直接调用即可18、vue首屏白屏如何解决1路由懒加载2vue-cli开启打包压缩 和后台配合 gzip访问3进行cdn加速4开启vue服务渲染模式5用webpack的externals属性把不需要打包的库文件分离出去减少打包后文件的大小6在生产环境中删除掉不必要的console.logplugins: [ new webpack.optimize.UglifyJsPlugin({ //添加-删除console.log compress: { warnings: false, drop_debugger: true, drop_console: true }, sourceMap: true }),7开启nginx的gzip ,在nginx.conf配置文件中配置http { //在 http中配置如下代码 gzip on; gzip_disable msie6; gzip_vary on; gzip_proxied any; gzip_comp_level 8; #压缩级别 gzip_buffers 16 8k; #gzip_http_version 1.1; gzip_min_length 100; #不压缩临界值 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; }8添加loading效果给用户一种进度感受19、vue中的v-cloak的理解使用 v-cloak 指令设置样式这些样式会在 Vue 实例编译结束时从绑定的 HTML 元素上被移除。一般用于解决网页闪屏的问题在对一个的标签中使用v-cloak然后在样式中设置[v-cloak]样式,[v-cloak]需写在 link 引入的css中或者写一个内联css样式写在import引入的css中不起作用。20、vue中template编译的理解答就是先转化成AST树再得到的render函数返回VNodeVue的虚拟DOM节点具体为首先通过compile编译器把template编译成AST语法树abstract syntax tree 即 源代码的抽象语法结构的树状表现形式compile是createCompiler的返回值createCompiler是用以创建编译器的。另外compile还负责合并option。然后AST会经过generate将AST语法树转化成render funtion字符串的过程得到render函数render的返回值是VNodeVNode是Vue的虚拟DOM节点里面有标签名、子节点、文本等等21、v-model的理解答v-model用于表单数据的双向绑定其实它就是一个语法糖这个背后就做了两个操作1v-bind绑定一个value属性2v-on指令给当前元素绑定input事件22、computed和watch的用法和区别computed1变量不在 data中定义而是定义在computed中写法跟写方法一样有返回值。函数名直接在页面模板中渲染不加小括号 。2根据传入的变量的变化 进行结果的更新。3计算属性基于响应式依赖进行缓存。如其中的任意一个值未发生变化它调用的就是上一次计算缓存的数据因此提高了程序的性能。而methods中每调用一次就会重新计算一次为了进行不必要的资源消耗选择用计算属性。watch1计算属性的时候 初始化的时候就可以被监听到并且计算 但是watch是发生改变的时候才会触发。2当有一些数据需要随着其它数据变动而变动时或者当需要在数据变化时执行异步或开销较大的操作时使用 watch。总结1计算属性变量在computed中定义属性监听在data中定义。2计算属性是声明式的描述一个值依赖了其他值依赖的值改变后重新计算结果更新DOM。属性监听的是定义的变量当定义的值发生变化时执行相对应的函数。23、$nextTick的使用答在vue中理解修改数据后对应的dom需要一定的时间进行更新因此为了能够准确的后去更新后的dom可以采用延迟回调的方法进行更新dom的获取所以出现了$nextTick来进行延迟回调。即在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法获取更新后的 DOM。24、data为什么是一个函数答这是有JavaScript的特性所导致在component中data必须以函数的形式存在不可以是对象。组建中的data写成一个函数数据以函数返回值的形式定义这样每次复用组件的时候都会返回一份新的data相当于每个组件实例都有自己私有的数据空间它们只负责各自维护的数据不会造成混乱。而单纯的写成对象形式就是所有的组件实例共用了一个data这样改一个全都改了。25、vue单页面和传统的多页面区别单页面应用SPA通俗一点说就是指只有一个主页面的应用浏览器一开始要加载所有必须的 html, js, css。所有的页面内容都包含在这个所谓的主页面中。但在写的时候还是会分开写页面片段然后在交互的时候由路由程序动态载入单页面的页面跳转仅刷新局部资源。多应用于pc端。多页面MPA指一个应用中有多个页面页面跳转时是整页刷新单页面的优点用户体验好快内容的改变不需要重新加载整个页面基于这一点spa对服务器压力较小前后端分离页面效果会比较炫酷比如切换页面内容时的专场动画。单页面缺点不利于seo导航不可用如果一定要导航需要自行实现前进、后退。由于是单页面不能用浏览器的前进后退功能所以需要自己建立堆栈管理初次加载时耗时多页面复杂度提高很多。26、vue常用的修饰符**.stop**等同于JavaScript中的event.stopPropagation()防止事件冒泡**.prevent**等同于JavaScript中的event.preventDefault()防止执行预设的行为如果事件可取消则取消该事件而不停止事件的进一步传播**.capture**与事件冒泡的方向相反事件捕获由外到内**.self**只会触发自己范围内的事件不包含子元素**.once**只会触发一次。27、vue更新数组时触发视图更新的方法答push()pop()shift()unshift()splice()sort()reverse()28、route和router的区别$routerrouter是VueRouter的一个对象通过Vue.use(VueRouter)和VueRouter构造函数得到一个router的实例对象这个对象中是一个全局的对象他包含了所有的路由包含了许多关键的对象和属性,常见的有1push向 history 栈添加一个新的记录当我们点击浏览器的返回按钮时可以看到之前的页面// 字符串 this.$router.push(home) // 对象 this.$router.push({ path: home }) // 命名的路由 this.$router.push({ name: user, params: { userId: 123 }}) // 带查询参数变成 /register?plan123 this.$router.push({ path: register, query: { plan: 123 }})2go页面路由跳转 前进或者后退// 页面路由跳转 前进或者后退 this.$router.go(-1) // 后退3replacepush方法会向 history 栈添加一个新的记录而replace方法是替换当前的页面不会向 history 栈添加一个新的记录$route$route对象表示当前的路由信息包含了当前URL解析得到的信息。包含当前的路径、参数、query对象等。1$route.path字符串对应当前路由的路径总是解析为绝对路径如 “/foo/bar”。2$route.params一个 key/value 对象包含了 动态片段 和 全匹配片段如果没有路由参数就是一个空对象。3$route.query一个 key/value 对象表示 URL 查询参数。例如对于路径 /foo?user1则有 $route.query.user 1如果没有查询参数则是个空对象。4$route.hash当前路由的 hash 值 (不带#) 如果没有 hash 值则为空字符串。5.$route.fullPath完成解析后的 URL包含查询参数和 hash 的完整路径。6$route.matched数组包含当前匹配的路径中所包含的所有片段所对应的配置参数对象。7.$route.name当前路径名字8.$route.meta路由元信息29、vue-router实现懒加载的方式vue异步组件vue异步组件技术 异步加载vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 。但是,这种情况下一个组件生成一个js文件/* vue异步组件技术 */ { path: /home, name: home, component: resolve require([/components/home],resolve) },{ path: /index, name: Index, component: resolve require([/components/index],resolve) },{ path: /about, name: about, component: resolve require([/components/about],resolve) }es提案的import()路由懒加载(使用import)// 下面2行代码没有指定webpackChunkName每个组件打包成一个js文件。 /* const Home () import(/components/home) const Index () import(/components/index) const About () import(/components/about) */ // 下面2行代码指定了相同的webpackChunkName会合并打包成一个js文件。把组件按组分块 const Home () import(/* webpackChunkName: ImportFuncDemo */ /components/home) const Index () import(/* webpackChunkName: ImportFuncDemo */ /components/index) const About () import(/* webpackChunkName: ImportFuncDemo */ /components/about){ path: /about, component: About }, { path: /index, component: Index }, { path: /home, component: Home }webpack的require,ensure()vue-router配置路由使用webpack的require.ensure技术也可以实现按需加载。这种情况下多个路由指定相同的chunkName会合并打包成一个js文件。/* 组件懒加载方案三: webpack提供的require.ensure() */ { path: /home, name: home, component: r require.ensure([], () r(require(/components/home)), demo) }, { path: /index, name: Index, component: r require.ensure([], () r(require(/components/index)), demo) }, { path: /about, name: about, component: r require.ensure([], () r(require(/components/about)), demo-01) }30、delete和Vue.delete删除数组的区别答delete只是被删除的元素变成了 empty/undefined 其他的元素的键值还是不变。Vue.delete 直接删除了数组 改变了数组的键值。31、路由跳转和location.href的区别使用location.href/url’来跳转简单方便但是刷新了页面使用路由方式跳转无刷新页面静态跳转32、vue的solt的用法在子组件内使用特殊的slot元素就可以为这个子组件开启一个slot插槽在父组件模板里插入在子组件标签内的所有内容将替代子组件的slot 标签及它的内容。简单说来就是在子组件内部用 标签占位当在父组件中使用子组件的时候我们可以在子组件中插入内容而这些插入的内容则会替换 标签的位置。当然单个solt的时候可以不对solt进行命名如果存在多个 则一个可以不命名其他必须命名在调用的时候指定名称的对应替换slot没有指定的则直接默认无名称的solt33、e m i t 、 emit 、emit、on 、o n c e 、 once 、once、off理解$emit触发当前实例上的自定义事件并将附加参数都传给监听器回调$on监听实例上自定义事件并调用回调函数监听emit触发的事件$once监听一个自定义事件但是只触发一次在第一次触发之后移除监听器。$off用来移除自定义事件监听器。如果没有提供参数则移除所有的事件监听器如果只提供了事件则移除该事件所有的监听器如果同时提供了事件与回调则只移除这个回调的监听器。这四个方法的实现原理是通过对vue实例挂载然后分别使用对象存储数组对应的函数事件其中emit通过循环查找存储的数组中对应的函数进行调用once只匹配一次就就结束on是将对应的函数存储到数组中off是删除数组中指定的元素或者所有的元素事件。具体可以参考文章VUEemit实现34、r o o t 、 root、root、refs、$parent的使用$root可以用来获取vue的根实例比如在简单的项目中将公共数据放再vue根实例上(可以理解为一个全局 store ),因此可以代替vuex实现状态管理$refs在子组件上使用ref特性后this.属性可以直接访问该子组件。可以代替事件emit 和$on 的作用。使用方式是通过ref特性为这个子组件赋予一个ID引用再通过this.$refs.testId获取指定元素。注意r e f s 只会在组件渲染完成之后生效并且它们不是响应式的。这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问 refs只会在组件渲染完成之后生效并且它们不是响应式的。这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问refs只会在组件渲染完成之后生效并且它们不是响应式的。这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问refs。$parent$parent属性可以用来从一个子组件访问父组件的实例可以替代将数据以 prop 的方式传入子组件的方式当变更父级组件的数据的时候容易造成调试和理解难度增加35、vue开发遇到的问题1样式污染答在编写样式中如果需要防止样式的污染可以使用两种方式一种是在组件的根元素上增加一个唯一的class或者id然后在编写组件的样式时候在根元素对应的class或者id下进行编写另一种方式是在对应的style上添加scoped关键字不过该关键字对引用的框架UI无效2router-link在安卓上不起作用答不起作用的原因是因为转码编译的问题可以使用babel来进行处理安装babel polypill插件解决3初始化页面出现闪屏乱码的问题答这是因为vue还没有解析的情况下会容易出现花屏现象看到类似于{{data}}的字样可以使用两种方式来进行处理一种为在设置index.html的根元素的元素的样式为display:none然后在mounted中的$nextTick函数中display:block展示另一种方式是使用vue的内置指令v-cloak,并且在css中设置样式[v-cloak] { display: none; }4router-link上事件无效解决方法答使用click.native来进行调用原生的js事件。原因router-link会阻止click事件.native指直接监听一个原生事件。2025开年AI技术打得火热正在改变前端人的职业命运阿里云核心业务全部接入Agent体系字节跳动30%前端岗位要求大模型开发能力腾讯、京东、百度开放招聘技术岗80%与AI相关……大模型正在重构技术开发范式传统CRUD开发模式正在被AI原生应用取代最残忍的是业务面临转型领导要求用RAG优化知识库检索你不会带AI团队微调大模型要准备多少数据你不懂想转型大模型应用开发工程师等相关岗没项目实操经验……这不是技术焦虑而是职业生存危机曾经React、Vue等热门的开发框架已不再是就业的金钥匙。如果认为会调用API就是懂大模型、能进行二次开发那就大错特错了。制造、医疗、金融等各行业都在加速AI应用落地未来企业更看重能用AI大模型技术重构业务流的技术人。如今技术圈降薪裁员频频爆发传统岗位大批缩水相反AI相关技术岗疯狂扩招薪资逆势上涨150%大厂老板们甚至开出70-100W年薪挖掘AI大模型人才不出1年 “有AI项目开发经验”或将成为前端人投递简历的门槛。风口之下与其像“温水煮青蛙”一样坐等被行业淘汰不如先人一步掌握AI大模型原理应用技术项目实操经验“顺风”翻盘大模型目前在人工智能领域可以说正处于一种“炙手可热”的状态吸引了很多人的关注和兴趣也有很多新人小白想要学习入门大模型那么如何入门大模型呢下面给大家分享一份2025最新版的大模型学习路线帮助新人小白更系统、更快速的学习大模型2025最新版CSDN大礼包《AGI大模型学习资源包》免费分享**一、2025最新大模型学习路线一个明确的学习路线可以帮助新人了解从哪里开始按照什么顺序学习以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛没有明确的学习路线可能会导致新人感到迷茫不知道应该专注于哪些内容。我们把学习路线分成L1到L4四个阶段一步步带你从入门到进阶从理论到实战。L1级别:AI大模型时代的华丽登场L1阶段我们会去了解大模型的基础知识以及大模型在各个行业的应用和分析学习理解大模型的核心原理关键技术以及大模型应用场景通过理论原理结合多个项目实战从提示工程基础到提示工程进阶掌握Prompt提示工程。L2级别AI大模型RAG应用开发工程L2阶段是我们的AI大模型RAG应用开发工程我们会去学习RAG检索增强生成包括Naive RAG、Advanced-RAG以及RAG性能评估还有GraphRAG在内的多个RAG热门项目的分析。L3级别大模型Agent应用架构进阶实践L3阶段大模型Agent应用架构进阶实现我们会去学习LangChain、 LIamaIndex框架也会学习到AutoGPT、 MetaGPT等多Agent系统打造我们自己的Agent智能体同时还可以学习到包括Coze、Dify在内的可视化工具的使用。L4级别大模型微调与私有化部署L4阶段大模型的微调和私有化部署我们会更加深入的探讨Transformer架构学习大模型的微调技术利用DeepSpeed、Lamam Factory等工具快速进行模型微调并通过Ollama、vLLM等推理部署框架实现模型的快速部署。整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握而L3 L4更多的是通过项目实战来掌握大模型的应用开发针对以上大模型的学习路线我们也整理了对应的学习视频教程和配套的学习资料。二、大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF三、大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。四、大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。五、大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。因篇幅有限仅展示部分资料需要点击下方链接即可前往获取2025最新版CSDN大礼包《AGI大模型学习资源包》免费分享
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

安能物流网站意派h5制作平台

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2026/1/9 14:16:05 网站建设

专业建公司网站学校网站要求

LobeChat:构建下一代AI聊天界面的技术实践 在大语言模型(LLM)能力不断突破的今天,一个有趣的现象正在发生:人们不再只关心“模型能做什么”,而是越来越在意“我该怎么用”。无论是企业客服、教育辅导&#…

张小明 2026/1/9 14:46:32 网站建设

什么语言做网站产品开发

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 制作一个Java断言入门教程,包含:1)assert基本语法动画演示 2)如何启用断言(命令行和IDE配置) 3)5个生活化类比帮助理解 4)新手常见错误及修正 5)交互式练习小…

张小明 2026/1/9 14:46:33 网站建设

网站建设的人才怎么称呼wordpress通过关键词

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2026/1/9 14:46:32 网站建设

古镇灯饰网站建设网络营销就是网络推广对吗

Weylus 终极指南:将平板电脑变身手写绘图板 【免费下载链接】Weylus Use your tablet as graphic tablet/touch screen on your computer. 项目地址: https://gitcode.com/gh_mirrors/we/Weylus Weylus 是一个革命性的开源工具,它能将你的平板电脑…

张小明 2026/1/9 14:46:33 网站建设