Vue学习二 实例创建

版权声明:Callback_heaven©版权所有 https://blog.csdn.net/weixin_41564885/article/details/80341125

Vue实例:

创建一个Vue实例:

    每个Vue应用都是通过Vue函数创建一个新的Vue实例开始的:

var vm = new Vue({
    //选项
})

Vue的设计受到MVVM模型的启发,当创建一个实例时,可以传入一个选项对象。

一个Vue应用通过new Vue创建的跟Vue实例,和可选的嵌套的、可复用的组件数组

成。

数据和方法:

    当一个Vue实例被创建的时候,它向Vue的响应式系统中加入了其data对象中能找

到的所有属性,当这些属性的值发生改变的时候,视图将会产生响应,即匹配更新的

值。

数据对象

var data = {a:1}

该对象被加入到一个Vue实例中

var vm = new Vue({

    data:data

})

获得这个实例上的属性,返回源数据中对应的字段

vm.a == data.a //返回true

设置属性也会影响到原始数据

vm.a = 2

data.a // =>2

data.a = 3

vm.a // =>3

当这些数据发生改变的时候,视图会重新进行渲染,只有当实例被创建的时候data中

存在的属性才是响应式的,也就是说如果添加新属性,例如:

vm.b = "hi"

那么b的改动将不会触发任何视图的更新,如果你知道会在晚些时候需要一个属性

,但是一个开始它为空或者不存在,那么你仅仅需要设置一些初始值,比如

data:{

 newTodoText:'',        初始化一个文本为空

 visitCount:0,             初始化一个数字为0

 hideCompletedTodos:false,  初始化一个bool为false

 todos:[],                    初始化一个数组为空数组

 error:null                   初始化一个错误提示为空

}

这里唯一的例外是使用Object.freeze(),这会阻止修改现有的属性,也意味着相应

系统无法追踪变化

var obj = {

foo:"bar"

}

Object.freeze(obj)

new Vue({

el:'#app',

data:obj

})

<div id="app">

<p>{{foo}}</p>

<button v-on:click="foo='naz'">change it </button>

</div>

除了数据属性,Vue实例还暴露了一些有用的实例属性与方法,他们都有前缀$,便

于与用户定义的属性区分,例如:

var data = { a:1 }

var vm = new Vue({

    el:"#example",

    data:data

})

vm.$data === data // = >返回true

vm.$el === document.getElementById("element"); // = > 返回true

vm.$watch("a",function(newValue,oldValue){

//这个会掉将会在vm.a调用后改变

})

实例生命周期钩子

每个Vue实例在被创建的时候都要经历一系列的初始化过程,例如,需要设置数据监

听、编译模板,将实例挂载到DOM并在数据变化时更新DOM等。同时在这个过程中

也会运行一些叫做生命周期钩子的函数,这可以实现在不同阶段添加不同代码

比如created钩子可以用来在一个实例被创建之后执行代码:

new Vue({

    data:{

        a:1

    },

    created:function(){

        console.log("a is" + this.a);

    }

})        // a is 1

也有一些其他的钩子,在实例生命周期的不同阶段被调用,比如:

mounted、updated和destroyed

生命周期钩子的this上下文指向调用Vue实例

注意:

    不要在选项属性或者回调上使用箭头函数,例如:

created: ()=> console.log(this.a)

vm.$watch("a",newValue=>this.myMethod())

原因:

    箭头函数是和父级上下文绑定在一起的,this不会是如你所预期的Vue实例

猜你喜欢

转载自blog.csdn.net/weixin_41564885/article/details/80341125