vue-小知识

一、Vue中给data中的对象添加一个新的属性时会发生什么,如何解决。
// 假如data中有一个obj对象,申明方式如下。
obj={name:'xudanfeng'}
// 通过这种方法添加age属性,属性添加成功,但是视图并未立马更新。
this.obj.age = 12
// 这种方法添加的属性,在视图中会立马刷新。
this.$set(this.obj,'sex','女')

原因在于在Vue实例创建时,obj.age并未声明,因此就没有被Vue转换为响应式的属性,自然就不会触发视图的更新,这时就需要使用Vue的全局api $set(),该方法相当于手动的去把obj.sex处理成一个响应式的属性,此时视图也会跟着改变了。

基于上方例子,修改obj.age值,视图也不会更新,因为不是响应式属性。

二、delete和Vue.delete删除数组的区别

delete:被删除的元素变成了 empty/undefined, 其他的元素的键值还是不变。
Vue.delete:直接删除了数组 改变了数组的键值。

let arr = [1, 2, 3, 4]
let arr2 = [1, 2, 3, 4]
delete arr[0]
this.$delete(arr2, 0)
console.log(arr, arr2)
// [empty, 2, 3, 4] [2,3,4]
三、网页从输入网址到渲染完成经历了哪些过程?
  1. 输入网址;
  2. 发送到DNS服务器,并获取域名对应的web服务器对应的ip地址;
  3. 与web服务器建立TCP连接;
  4. 浏览器向web服务器发送http请求;
  5. web服务器响应请求,并返回指定url的数据(或错误信息,或重定向的新的url地址);
  6. 浏览器下载web服务器返回的数据及解析html源文件;
  7. 生成DOM树,解析css和js,渲染页面,直至显示完成;

参考文章

四、Vue的路由实现:hash模式 和 history模式

默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。

使用history 模式时,URL 就像正常的 url,例如 http://yoursite.com/user,来完成 URL 跳转而无须重新加载页面,不过还需要后台配置支持。

五、vue路由的钩子函数

参考文档

全局前置钩子:

router.beforeEach((to, from, next) => {
  // ...
})

全局后置钩子:

router.afterEach((to, from) => {
  // ...
})

路由独享的守卫:

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})

组件内的守卫:

const Foo = {
  template: `...`,
  beforeRouteEnter (to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
  },
  beforeRouteUpdate (to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
  },
  beforeRouteLeave (to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
  }
}
六、vue常用的修饰符?

.stop - 调用 event.stopPropagation()。
.prevent - 调用 event.preventDefault()。
.capture - 添加事件侦听器时使用 capture 模式。
.self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。
.{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。
.native - 监听组件根元素的原生事件。
.once - 只触发一次回调。
.left - (2.2.0) 只当点击鼠标左键时触发。
.right - (2.2.0) 只当点击鼠标右键时触发。
.middle - (2.2.0) 只当点击鼠标中键时触发。

<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>

<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>

<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>

<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>

<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即元素自身触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>

<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>
七、vue自定义指令

https://cn.vuejs.org/v2/guide/custom-directive.html

八、Vue的生命周期

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

生命周期钩子的 this 上下文指向调用它的 Vue 实例。
在这里插入图片描述

九、Vue的选项/DOM
  • el: 提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标。可以是 CSS 选择器,也可以是一个 HTMLElement 实例。
  • template: 一个字符串模板作为 Vue 实例的标识使用。模板将会替换挂载的元素。挂载元素的内容都将被忽略,除非模板的内容有分发插槽。
  • render: 渲染函数,字符串模板的代替方案,允许你发挥 JavaScript 最大的编程能力。
Vue.component('anchored-heading', {
  render: function (createElement) {
    return createElement(
      'h' + this.level,   // 标签名称
      this.$slots.default // 子节点数组
    )
  },
  props: {
    level: {
      type: Number,
      required: true
    }
  }
})
十、Vue的插件

当浏览器读到这些代码时,它会建立一个“DOM 节点”树来保持追踪所有内容,如同你会画一张家谱树来追踪家庭成员的发展一样。

每个元素都是一个节点。每段文字也是一个节点。甚至注释也都是节点。一个节点就是页面的一个部分。就像家谱树一样,每个节点都可以有孩子节点 (也就是说每个部分可以包含其它的一些部分)。

Vue 通过建立一个虚拟 DOM 来追踪自己要如何改变真实 DOM。

createElement 到底会返回什么呢?其实不是一个实际的 DOM 元素。它更准确的名字可能是 createNodeDescription,因为它所包含的信息会告诉 Vue 页面上需要渲染什么样的节点,包括及其子节点的描述信息。我们把这样的节点描述为“虚拟节点 (virtual node)”,也常简写它为“VNode”。“虚拟 DOM”是我们对由 Vue 组件树建立起来的整个 VNode 树的称呼。

VNode 必须唯一

十一、Vue的插件
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值