Vue经典题

1Vue实现数据双向绑定的原理是什么?

是通过Object.defineProperty()来实现数据劫持
数据劫持和发布-订阅者功能来实现;
实现一个监听者Oberver来劫持并监听所有的属性,一旦有属性发生变化就通知订阅者,实现一个订阅者watcher来接受属性变化的通知并执行相应的方法,从而更新视图,实现一个解析器compile,可以扫描和解析每个节点的相关指令,并根据初始化模板数据以及初始化相对应的订阅者

2怎么定义vue-router的动态路由?怎么获取传过来的动态参数?

在router目录下的index定义,path属性加上 /:****,使用 router 对象的 query或params
query传参会显示在url,刷新依然在;params如果配置了路由,会以/val1/val2的形式值显示在路由,刷新不会丢失;如果不配置路由,数据不会显示在url,刷新会丢失。

3vue-router常用的导航钩子?

beforeEach全局,beforeEnter单独路由

4vue-router有哪些组件?

<router-link :to=’’ /home/…’> //路由声明式跳转,active-class是标签被点击时的样式,tag标签名;
< router-view>//渲染路由的容器;
< keep-alive>//缓存组件

5.请说下封装 vue 组件的过程?

● 首先,使用Vue.extend()创建
● 然后,使用Vue.component()注册组件
● 接着,如果子组件需要数据,可以在props中接受定义
● 最后,子组件修改好数据之后,想把数据传递给父组件,可以使用emit()方法

6.你是怎么认识Vuex的?

它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

7.vue.cli中怎样使用自定义的组件?有遇到过哪些问题吗?

1.在components目录新建你的组件文件(indexPage.vue),script一定要export default {}
2.在需要用的页面(组件)中导入:import indexPage from ‘@/components/indexPage.vue’
3.注入到vue的子组件的components属性上面,components:{indexPage}
4.在template视图view中使用,
例如有indexPage命名,使用的时候则index-page

8.vue为什么不直接操作dom?

1.性能损耗,操作DOM是及其损耗性能得
2.代码得质量会降低,出现一些多余得代码,经常直接操作DOM 会导致一些不可预测得问题,当你在一个组件当中直接操作全局得DOM时,有可能会影响到其他页面,一旦报错,定位问题会比较困难。

9.Vue声明组件的state是用data方法,那为什么data是通过一个function来返回一个对象,而不是直接写一个对象呢?

如果不用函数返回每个组件的data都是内存的同一个地址,每次引用赋值,容易造成浅拷贝。用函数返回其实就相当于申明了新的变量,相互独立,自然就不会有这样的问题。

10.介绍一下插槽应用?

作用域插槽
应用场景:父组件对子组件的内容进行加工处理
作用域插槽是一种特殊类型的插槽,作用域插槽会绑定了一套数据,父组件可以拿这些数据来用,
于是,情况就变成了这样:样式父组件说了算,但父组件中内容可以显示子组件插槽绑定的数据。

//子组件
 <div>
    <slot text="我是子组件中的内容"></slot>
 </div>

//父组件
<banner> 
    <div slot-scope="props">
        <div>父组件</div>
        <h3>{{ props.text }}</h3>
    </div>
</banner>

匿名插槽
匿名插槽,每一次引用都会全部渲染插槽
具名插槽
slot 元素可以用一个特殊的特性 name 来进一步配置如何分发内容。多个插槽可以有不同的名字,具名插槽将匹配内容片段中有对应 slot 特性的元素。
具名插槽存在的意义就是为了解决在单个页面中同时使用多个插槽。
如果没有起名的话,默认为default

11.computed和watch区别?

computed
支持缓存,只在依赖的数据发生变化时,才会重新计算,否则当多次调用computed属性时,调用的其实是缓存;
不支持异步,当computed内有异步操作时无效,无法监听数据的变化
如果一个数据需要经过复杂计算就用 computed
watch 侦听器
不支持缓存,每调用一次就计算一次;
watch支持异步;
如果一个数据需要被监听并且对数据做一些操作就用 watch
methods 方法
不支持缓存, 只要使用该方法便进行调用。

12.条件渲染中的key?

无:key属性时,状态默认绑定的是位置; 删除所有,重新渲染,
有:key属性时,状态根据key的属性值绑定到了相应的数组元素。删除某一条不会重新渲染,节省性能,

13.hash路由和history路由区别?

在地址栏会有一个#号,hash发生变化的url都会被浏览器记录下来,使得浏览器的前进后退都可以使用了,hash出现在url中,但是不会被包括在HTTP请求中,对后端没有影响,不会重新加载页面。
history ——利用了HTML5 History Interface 中新增的pushState() 和replaceState() 方法。提供了对历史记录进行修改的功能。虽然改变了当前的URL,但你浏览器不会立即向后端发送请求。
history模式,会出现404 的情况,需要与后端协调配置返回页面。

14.介绍一下Vuex
state:存储状态(变量)外部使用是this.$store.state.isShow = false
mutations:show(state, data){}函数名是外部commit第一个参,show的第一个参数是state对象,修改状态,并且是同步的。在外部使用this.$store.commit(‘show’,data)第二个参是show(state, data){}中的参data

actions:异步操作。在组件中使用是$store.dispath(’’)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值