vue基础知识

VUE

vue的实例属性

$data

Vue 实例观察的数据对象。Vue 实例代理了对其 data 对象属性的访问。

console.log(this.text === this.$data.text); //true

$props

当前组件接收到的 props 对象。Vue 实例代理了对其 props 对象属性的访问,在子组件上使用

$el

Vue 实例使用的根 DOM 元素。在子组件上就是子组件的根DOM元素

$options

用于当前 Vue 实例的初始化选项。需要在选项中包含自定义属性时会有用处,直接修改$options.data的值不会更改数据,也不会触发视图渲染

$parent

父实例,如果当前实例有的话。

$root

当前组件树的根 Vue 实例。如果当前实例没有父实例,此实例将会是其自己。

const app = new Vue({})
this.$root === this.$root.$children[0].$root  // true
this.$root === app  //true

$children

当前实例的直接子组件。**需要注意 c h i l d r e n 并 不 保 证 顺 序 , 也 不 是 响 应 式 的 。 ∗ ∗ 如 果 你 发 现 自 己 正 在 尝 试 使 用 ‘ children 并不保证顺序,也不是响应式的。**如果你发现自己正在尝试使用 ` children使children来进行数据绑定,考虑使用一个数组配合v-for` 来生成子组件,并且使用 Array 作为真正的来源。

$slots

用来访问被插槽分发的内容。每个具名插槽 有其相应的属性 (例如:slot="foo"中的内容将会在 vm.$slots.foo 中被找到)。default 属性包括了所有没有被包含在具名插槽中的节点。

在使用渲染函数书写一个组件时,访问 vm.$slots 最有帮助。

$scopedSlots

用来访问作用域插槽。对于包括 默认 slot 在内的每一个插槽,该对象都包含一个返回相应 VNode 的函数。

vm.$scopedSlots 在使用渲染函数开发一个组件时特别有用。

$refs

一个对象,持有注册过 ref特性的所有 DOM 元素和组件实例。

$isServer

当前 Vue 实例是否运行于服务器。用于服务端渲染

$attrs

包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (classstyle 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (classstyle 除外),并且可以通过 v-bind="$attrs" 传入内部组件——在创建高级别的组件时非常有用。

$listeners

包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on="$listeners" 传入内部组件——在创建更高层次的组件时非常有用。

Vue实例方法

$watch( expOrFn, callback, [options] )

观察 Vue 实例变化的一个表达式或计算属性函数。回调函数得到的参数为新值和旧值

$on( event, callback )

监听当前实例上的自定义事件。事件可以由vm.$emit触发。回调函数会接收所有传入事件触发函数的额外参数。

$emit( eventName, […args] )

触发当前实例上的事件。附加参数都会传给监听器回调。

$once( event, callback )

监听一个自定义事件,但是只触发一次,在第一次触发之后移除监听器。

$forceUpdate()

不建议使用,频度控制不好容易造成内存溢出

迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。

如果更改在data中未声明的值,则不会触发视图更新,可以通过这个方法强制渲染,也可以通过$set避免这种情况

$off( [event, callback] )

移除自定义事件监听器。

  • 如果没有提供参数,则移除所有的事件监听器;
  • 如果只提供了事件,则移除该事件所有的监听器;
  • 如果同时提供了事件与回调,则只移除这个回调的监听器。

$set( target, key, value )

Vue.set的别名

向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因为 Vue 无法探测普通的新增属性 (比如 this.myObject.newProperty = 'hi')

注意对象不能是 Vue 实例,或者 Vue 实例的根数据对象。

$delete( target, key, value)

Vue.delete的别名

删除对象的属性。如果对象是响应式的,确保删除能触发更新视图。这个方法主要用于避开 Vue 不能检测到属性被删除的限制,但是你应该很少会使用它。

$nextTick([callback])

Vue的渲染是异步的

将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。它跟全局方法 Vue.nextTick 一样,不同的是回调的 this 自动绑定到调用它的实例上。

Vue对象的生命周期

Vue数据绑定

vue可以访问绑定在this上的变量,无法访问定义在实例外的全局变量

computed

计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。

计算属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。注意,如果某个依赖 (比如非响应式属性) 在该实例范畴之外,则计算属性是不会被更新的。

如果不指定set,那么默认提供的函数将被用作属性的getter函数

var vm = new Vue({
  data: { a: 1 },
  computed: {
    // 仅读取
    aDouble: function () {
      return this.a * 2
    },
    // 读取和设置
    aPlus: {
      get: function () {
        return this.a + 1
      },
      set: function (v) {
        this.a = v - 1
      }
    }
  }
})
vm.aPlus   // => 2
vm.aPlus = 3
vm.a       // => 2
vm.aDouble // => 4

watch

观察 Vue 实例变化的一个表达式或计算属性函数。回调函数得到的参数为新值和旧值。表达式只接受监督的键路径。对于更复杂的表达式,用一个函数取代。

 watch: {
    a: function (val, oldVal) {
      console.log( val, oldVal)
    }
 }

选项:deep

为了发现对象内部值的变化,可以在选项参数中指定 deep: true 。注意监听数组的变动不需要这么做。

当更改对象内部值时,vue的watch如果设置在整个对象上,那么将不会监听到变化,这时可以指定deep:true,但是这么做性能开销较大,因为每次对象中的任意一个值变化都会触发监听,可以在watch中直接监听内部值而不是整个对象

watch:{
    'obj.a':{
        get:function(){
     		//do something       
        }
    }
}

选项:immediate

在选项参数中指定 immediate: true 将立即以表达式的当前值触发回调

只有在vue第一次触发数据更新后,监听函数才会执行,制定了immediatetrue后,会在页面mouted后直接触发监听函数

Vue原生指令

v-show

根据表达式之真假值,切换元素的 display CSS 属性。

v-if

根据表达式的值的真假条件渲染元素。在切换时元素及它的数据绑定 / 组件被销毁并重建。如果元素是