美文网首页Web前端
Vue - 实例 工程

Vue - 实例 工程

作者: 廖马儿 | 来源:发表于2018-01-31 17:16 被阅读6次

官网文档:
http://cn.vuejs.org/guide/instance.html

课程大纲:
构造器 Constructor
属性与方法 Properties_and_Methods
实例生命周期 Instance_Lifecycle

  1. 构造器
    每个Vue.js应用的起步都是通过构造函数Vue创建一个Vue的根实例(root Vue instance):
// 记住 new Vue() 就是根实例,这就是规则
var vm = new Vue({
  // 选项
})

一个Vue实例其实正是一个MVVM模式中所描述的ViewModel, 因此在文档中经常会使用vm这个变量。

构造器与实例:

构造器(Constructor):
是用来设定对象的property或者呼叫method,以让未来物件能够正确运作。
实例(Instance):
是构造器new 以后的物件。

构造器,一般就是一个构造函数,用于创建实例对象。比如一个类的构造函数,用于创建对象。

在实例化Vue对象时候,需要传入一个选项对象,它可以包含数据,模板,挂载元素,方法,生命周期钩子等选项。全部的选项可以在API文档中查看。

可以扩展Vue构造器,从而用预定义选项创建可复用的组件构造器。

var MyComponent = Vue.extend({
  // 扩展选项
})

所有的MyComponent实例都可以将预定义的扩展选项被创建,

var my_component_instance = new MyComponent()

构造器扩展
Vue.extend()

Vue.extend({
  template: '<div>vue组件实例</div>'
})  

Vue实例 与 Vue组件的关系

目前只需要明白所有的 Vue 组件都是 Vue 实例,并且接受相同的选项对象 (一些根实例特有的选项除外)。
还有一些,比如设计目的,Vue是设计与App的启动,而组件是Vue实例的扩展。

Vue实例会代替其data对象里面所有的属性

var data = {a : 1}
var vm = new Vue({
  el: '#app',
  data: data
})

vm.a === data.a === vm.$data.a

注意:只有这些被代理的属性是响应的。
如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。


Vue实例的实例属性与方法

除了这些数据属性,Vue实例暴露了一些有用的实例属性与方法。这些属性与方法都有前缀$,以便与代理的数据属性区分。

var data = {a : 1}
var vm = new Vue({
  el: '#app',
  data: data
})

vm.$el === document.getElementById('app')  // 这里不是jQuery不是`#app`哈
vm.$data === data 

$watch()是一个实例方法,监听着 vue data的变化,一旦有变化,都会启动

vm.$watch()

eg:

var data = {a : 1}
var vm = new Vue({
  el: '#app',
  data: data
})

vm.$watch('a', function (new_value, old_value) {
  console.log('old:'+old_value + ' new:'+new_value)  // 当a有改变,就会在console中打印。
})

实例的生命周期

Vue实例在创建时候有一些列初始化步骤,比如:它需要建立数据观察,编译模板,创建必要的数据绑定。
在此过程中,它也将调用一些生命周期钩子,给自己定义逻辑提供运行机会。

例如:

var vm = new Vue({
  el: '#app',
  data: {
    a:1
  },
  created: function () {
    console.log('a is: ' + this.a)
  }
})

vue实例在创建完成之后,那么就会执行created方法。

Vue实例的生命周期:


图片.png

注意:这个图片是vue.js1.0的,ready都被换为了mounted在vue2.0中。
红色框住的是生命周期函数。


经验

示例:
index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>vuejs-test01</title>

    <link href="./src/assets/styles/style.css" type="text/css" rel="stylesheet"  >
  </head>
  <body>

    <div id="app"></div>
    <script src="/dist/build.js"></script>
  </body>
</html>

App.vue:

<template>
  <div id="app">
    <!-- 图片 -->
    <div id="bag">{{ helth }}</div>

    <!-- 进度情况 -->
    <div id="bag-helth">
      <div :style="{ width:helth + '%' }"></div>
    </div>

    <!-- 控制按钮 -->
    <div id="control">
      <button @click="punch" v-show="!ended">click</button>
      <button @click="restart">restart</button>
    </div>
  </div>
</template>

注意:index.html和App.vue中都有<div id="app">。他们是重复的。

  1. index.html 中需要有<script src="/dist/build.js"></script>,不能缺少:
    并且npm run dev才能显示:
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>vuejs-test01</title>

    <link href="./src/assets/styles/style.css" type="text/css" rel="stylesheet"  >
  </head>
  <body>

    <div id="app"></div>
    <script src="/dist/build.js"></script>
  </body>
</html>

2.App.vue 在项目中也是组件,不直接是Vue实例:
所以 data 应该是返回的函数:

<script>
  export default {
    data: function() {
      return {
        helth: 100,
        ended: false,
      }
    },
  ...

3.index.html和App.vue中都有<div id="app">。他们是重复的。

我们这李可以看出render函数的作用:
index.html

<body>
    <div id="app"></div>
    <script src="/dist/build.js"></script>
</body>

main.js:

  el: '#app',
  render: h => h(App),  // 渲染DOM完成之后,将App模板渲染,覆盖掉此el的DOM节点
})

App.vue

<template>
  <div id="app">
    <!-- 图片 -->
    <div id="bag">{{ helth }}</div>

    <!-- 进度情况 -->
    <div id="bag-helth">
      <div :style="{ width:helth + '%' }"></div>
    </div>
    
    <!-- 控制按钮 -->
    <div id="control">
      <button @click="punch" v-show="!ended">click</button>
      <button @click="restart">restart</button>
    </div>
  </div>
</template>

我们可以看到index.html和App.vue的模板的最顶层的id都是app

相关文章

  • Vue - 实例 工程

    官网文档:http://cn.vuejs.org/guide/instance.html 课程大纲:构造器 Con...

  • webpack学习入门

    内容提纲 electron-vue项目中的webpack工程实例 思考 webpack与gulp/grunt HM...

  • 第3章 Vue 基础精讲

    3-1 Vue实例 vue实例是根实例,组件也是vue实例,所以说页面是由很多vue实例组成的data(): 以d...

  • vue基础知识

    new Vue() 创建 Vue 实例,其中 Vue.components() 也可以创建 Vue 实例。 Vue...

  • vue实例

    Vue实例化 1.创建一个Vue实例 通过Vue构造函数new 一个新的vue实例, 当你创建一个vue实例,你可...

  • Vue.js学习笔记(2)

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

  • Vue.js 数据绑定、指令、事件

    Vue 实例和数据绑定 通过构造函数 Vue 就可以创建一个 Vue 的根实例,并启动 Vue 应用。Vue 实例...

  • vue实例和数据绑定

    vue实例和数据绑定 vue实例和数据绑定 通过script便签引入vue 通过vue构造函数来创建一个vue实例...

  • Vue引入、指令、挂载点、模板、实例和绑定事件

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

  • Vue实例与模板语法

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

网友评论

    本文标题:Vue - 实例 工程

    本文链接:https://www.haomeiwen.com/subject/zitlzxtx.html