Vue2.0笔记——Vue实例

Vue实例

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

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

当创建一个 Vue 实例时,你可以传入一个选项对象,就如前面所提到的如:data,methods,computed,watch等等。
一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实例,以及可选的嵌套的、可复用的组件树组成。举个例子,一个 todo 应用的组件树可以是这样的:

根实例Root
└─ TodoList
   ├─ TodoItem
   │  ├─ DeleteTodoButton
   │  └─ EditTodoButton
   └─ TodoListFooter
      ├─ ClearTodosButton
      └─ TodoListStatistics

我们会在稍后的组件系统章节具体展开。

数据和方法

只要是包含在Vue实例中的属性都是响应式的。当这些属性的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。

// 我们的数据对象
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 中存在的属性才是响应式的。
如果你晚些需要使用到某个属性,你可以为它定义初始值,以防止后面无法直接使用到属性。

当然,可以不对属性进行响应式追踪,Object.freeze(),这会阻止修改现有的属性,也意味着响应系统无法再_追踪_变化。

var obj = {
    foo: ‘bar‘
}

Object.freeze(obj)

new Vue({
    el: ‘#app‘,
    data: obj
})

除了数据属性,还暴露了实例的属性和方法,他们都有前缀$,如$set,$delete,$watch,以便于用户自定义的属性区分开来。
这些属性方法在下节述说。可以查看官方API

生命周期

跟其他语言实例对象一样,Vue实例也有自己的生命周期。
而这些生命周期中的过程,运行的一些函数叫生命周期钩子
这些函数分别为:

  • beforeCreate //实例刚创建,为监视或配置属性,事件,只进行了new操作
  • created //创建实例已经完成,并完成了属性的监视和事件配置
  • beforeMount //模板编译之前,未挂载,数据还未显示到视图已依旧为模板{{}}
  • mounted //模板编译之后,已经挂载,渲染页面,显示数据
  • beforeUpdate //组件更新之前执行
  • updated //组件更新之后执行
  • beforeDestroy //组件销毁之前执行
  • destroyed //组件销毁,清理它与其它实例的连接,解绑它的全部指令及事件监听器
    举个案例:
    <div id="app">
    message:{{msg}}
    <br/>
    <button @click="changeMsg">修改message属性</button><br/>
    <button onclick="destory()">销毁实例</button>
    </div>
var vm = new Vue({
        el:‘#app‘,
        data:{
            msg:‘this is Vue Test‘
        },
        methods:{
            changeMsg(){
                this.msg = ‘此章节为Vue2.0笔记——Vue实例‘;
            }
        },
        beforeCreate(){
            alert(‘组件实例刚刚创建,还未进行数据观测和事件配置‘);
        },
        created(){  //常用!!!
            alert(‘实例已经创建完成,并且已经进行数据观测和事件配置‘);
        },
        beforeMount(){
            alert(‘模板编译之前,还没挂载‘);
        },
        mounted(){ //常用!!!
            alert(‘模板编译之后,已经挂载,此时才会渲染页面,才能看到页面上数据的展示‘);
        },
        beforeUpdate(){
            alert(‘组件更新之前‘);
        },
        updated(){
            alert(‘组件更新之后‘);
        },
        beforeDestroy(){
            alert(‘组件销毁之前‘);
        },
        destroyed(){
            alert(‘组件销毁之后‘);
        }

    })
    function destory(){
        vm.$destroy();
    }

当执行完毕后,更新会自动触发,销毁后,无法更改值。

在其中created函数和mounted函数是较为常用的钩子函数
另外:不要在选项属性或回调上使用箭头函数
比如 created: () => console.log(this.a) 或 vm.$watch(‘a‘, newValue => this.myMethod())。因为箭头函数是和父级上下文绑定在一起的,this 不会是如你所预期的 Vue 实例,经常导致 Uncaught TypeError: Cannot read property of undefined 或 Uncaught TypeError: this.myMethod is not a function 之类的错误。

如果此文章未能让您更明白,请参考Vue实例与生命周期

原文地址:http://blog.51cto.com/zouzhelu/2105104

时间: 2024-12-09 20:59:23

Vue2.0笔记——Vue实例的相关文章

Vue2.0笔记——Vue常用实例属性,实例方法

实例属性 vm.$el vm.$data vm.options vm.$refs vm.$root vm.$el 该实例属性用于获取Vue实例使用的根DOM元素,即el选项所指的元素DOM <body> <div id="app"> <h4>你好,这是四级标题</h4> <p>这是一个段落,我什么都不想说</p> </div> <button onclick="getEl()"

vue2.0学习(四)-实例和内置组件

vue2.0学习(四)-实例和内置组件 1.实例入门-实例属性 一.Vue和Jquery.js一起使用 下载可以去官网进行下载,我这里使用的版本是3.1.1,下载好后在需要的页面引入就可以了.当然你还有很多其它的方法引入jquery,只要可以顺利引入就可以了. <script type="text/javascript" src="../assets/js/jquery-3.1.1.min.js"></script> <!DOCTYPE

Vue2.0总结———vue使用过程常见的一些问题

Vue目前的的开发模式主要有两种: 1.直接页面级的开发,script直接引入Vue 2.工程性开发,webpack+loader或者直接使用脚手架工具Vue-cli,里面的文件都配置好了 webpack可以进行配置,配置多文件入口,进行多页面开发 第二种Vue开发,结合webpack打包完文件会很大,怎么解决这个问题? 1.webpack代码拆分:code-spliting 2.提取公共(如提取css,js) 3.预渲染:使用prerender-spa-plugin插件 4.后台----开启压

Vue2.0笔记——{{}}模板与自定义过滤器

模板语法 让我们回到最开始 <div id="app"> <h1>{{message}}</h1> </div> <script> var vm = new Vue({ el:'#app', data:{ message:'HelloWorld' } }) </script> 这是一个HelloWorld,简单的通过模板输出.我们称之为数据绑定,而最常见的就是"Mustache"语法 (双大括号

Vue2.0笔记——组件

组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.组件是自定义元素,Vue.js 的编译器为它添加特殊功能. 使用组件 组件的注册与使用 全局注册 我们需要通过一个全局的API来构造.Vue.extend(options)用法:使用基础 Vue 构造器,创建一个"子类".参数是一个包含组件选项的对象.同时还需要一个API通过这个构造器来注册组件,之后才能使用.Vue.component(id, [definition])用

Vue2.0笔记——起步

起步 同其他jquery一样,Vue也是需要引用的通过<script>标签引入js文件 <script src="js/vue.js"></script> 你可以去github下载,也可以直接引用Vue的js https://github.com/vuejs/vue/releases 或 <script src="https://cdn.jsdelivr.net/npm/vue"></script> 声明式

Vue2.0笔记——组件2

组件组合 父子组件的通信 组件 A 在它的模板中使用了组件 B.它们之间必然需要相互通信:父组件可能要给子组件下发数据,子组件则可能要将它内部发生的事情告知父组件. 首先,需要在Vue实例里定义一个组件,设置data,然后在这个组件里再添加一个conponents选项,注意不要添错位置.示例: <div id="app"> <my-father></my-father> </div> //父组件的模板 <template id=&q

Vue2.0笔记——vue-router路由

简介 使用Vue.js开发SPA(Single Page Application)单页面应用.vue-router可以通过html5的history API或者hash实现单页应用,即不刷新跳转,切换地址,只是页面上的组件的切换:vue-router可以实现页面间传参等其他功能: 基本用法 当你要把 vue-router 添加进来,我们需要做的是,将组件(components)映射到路由(routes),然后告诉 vue-router 在哪里渲染它们. 首先我们需要定义链接url,而vue-ro

Vue2.0笔记——属性绑定和Class与Style绑定

属性绑定 通过指令v-bind可以绑定属性,该指令同v-on一样,也有一个简写,":"冒号.绑定元素的属性,并且可与元素的原属性共存.当原属性有值时则显示原属性的值,无值则使用绑定的值. <div id="app"> <img :src="url" :width="width" width="800" :height="height"/> </div>