Vue教程:简介(一)

前言

用了这么久的vue了,但是一直没有时间写个系列文章,现在抽一定时间总结下vue的知识点。

首先,Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。但它支持所有兼容 ECMAScript 5 的浏览器。
下面总结的内容是在2.x的版本。

安装

直接用 <script> 引入

直接下载并用 <script> 标签引入,Vue 会被注册为一个全局变量。

在开发环境下不要使用压缩版本,不然你就失去了所有常见错误相关的警告!

CDN

推荐:https://cdn.jsdelivr.net/npm/vue,会保持和 npm 发布的最新的版本一致。可以在 https://cdn.jsdelivr.net/npm/vue/ 浏览 npm 包资源。
也可以从 unpkg 和 cdnjs 获取 (cdnjs 的版本更新可能略滞后)。

NPM

在用 Vue 构建大型应用时推荐使用 NPM 安装。NPM 能很好地和诸如 webpack 或 Browserify 模块打包器配合使用。同时 Vue 也提供配套工具来开发单文件组件。

# 最新稳定版
$ npm install vue

命令行工具 (CLI)

快速搭建大型单页应用,只需几分钟即可创建并启动一个带热重载、保存时静态检查以及可用于生产环境的构建配置的项目:

# 全局安装 vue-cli
$ npm install --global vue-cli
# 创建一个基于 webpack 模板的新项目
$ vue init webpack my-project
# 安装依赖,走你
$ cd my-project
$ npm install
$ npm run dev

开发版本

GitHub 仓库的 /dist 文件夹只有在新版本发布时才会提交。如果想要使用 GitHub 上 Vue 最新的源码,你需要自己构建!

git clone https://github.com/vuejs/vue.git node_modules/vue
cd node_modules/vue
npm install
npm run build

第一个程序Hello Vue

<div id="app">
  {{ message }}
</div>
var app = new Vue({
  el: ‘#app‘,
  data: {
    message: ‘Hello Vue!‘
  }
})

现在数据和 DOM 已经被建立了关联,所有东西都是响应式的。我们要怎么确认呢?打开你的浏览器的 JavaScript 控制台 (就在这个页面打开),并修改 app.message 的值

vue核心最基本的功能

声明式渲染

给某一个DOM元素绑定属性,如下

<div id="app">
  <span v-bind:title="message">
    鼠标悬停几秒钟查看此处动态绑定的提示信息!
  </span>
</div>

JS代码:

var app = new Vue({
  el: ‘#app‘,
  data: {
    message: ‘页面加载于 ‘ + new Date().toLocaleString()
  }
})

其中上面用到的v-bind 特性被称为指令

条件与循环

控制切换一个元素是否显示也相当简单:

<div id="app">
  <p v-if="seen">现在你看到我了</p>
</div>
var app = new Vue({
  el: ‘#app‘,
  data: {
    seen: true
  }
})

v-for 指令可以绑定数组的数据来渲染一个项目列表:

<div id="app">
  <ol>
    <li v-for="todo in todos">
      {{ todo.text }}
    </li>
  </ol>
</div>
var app = new Vue({
  el: ‘#app‘,
  data: {
    todos: [
      { text: ‘学习 JavaScript‘ },
      { text: ‘学习 Vue‘ },
      { text: ‘整个牛项目‘ }
    ]
  }
})

在控制台里,输入 app.todos.push({ text: ‘新项目‘ }),你会发现列表最后添加了一个新项目。

处理用户输入

Vue 提供了 v-model 指令,它能轻松实现表单输入和应用状态之间的双向绑定。

<div id="app">
  <p>{{ message }}</p>
  <input v-model="message">
</div>
var app = new Vue({
  el: ‘#app‘,
  data: {
    message: ‘Hello Vue!‘
  }
})

组件化应用构建

重要:需要明白所有的 Vue 组件都是 Vue 实例,并且接受相同的选项对象 (一些根实例特有的选项除外)。

组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用。仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树:

在 Vue 里,一个组件本质上是一个拥有预定义选项的一个 Vue 实例。在 Vue 中注册组件很简单:

// 定义名为 todo-item 的新组件
Vue.component(‘todo-item‘, {
  template: ‘<li>这是个待办项</li>‘
})

现在你可以用它构建另一个组件模板:

<ol>
  <!-- 创建一个 todo-item 组件的实例 -->
  <todo-item></todo-item>
</ol>

但是这样会为每个待办项渲染同样的文本,这看起来并不炫酷。我们应该能从父作用域将数据传到子组件才对。让我们来修改一下组件的定义,使之能够接受一个prop

Vue.component(‘todo-item‘, {
  // todo-item 组件现在接受一个
  // "prop",类似于一个自定义特性。
  // 这个 prop 名为 todo。
  props: [‘todo‘],
  template: ‘<li>{{ todo.text }}</li>‘
})

现在,我们可以使用 v-bind 指令将待办项传到循环输出的每个组件中:

<div id="app">
  <ol>
    <!--
      现在我们为每个 todo-item 提供 todo 对象
      todo 对象是变量,即其内容可以是动态的。
      我们也需要为每个组件提供一个“key”,稍后再
      作详细解释。
    -->
    <todo-item
      v-for="item in groceryList"
      v-bind:todo="item"
      v-bind:key="item.id">
    </todo-item>
  </ol>
</div>
Vue.component(‘todo-item‘, {
  // todo-item 组件现在接受一个
  // "prop",类似于一个自定义特性。
  // 这个 prop 名为 todo。
  props: [‘todo‘],
  template: ‘<li>{{ todo.text }}</li>‘
})

var app = new Vue({
  el: ‘#app‘,
  data: {
    groceryList: [
      { id: 0, text: ‘蔬菜‘ },
      { id: 1, text: ‘奶酪‘ },
      { id: 2, text: ‘随便其它什么人吃的东西‘ }
    ]
  }
})

这个例子子单元通过 prop 接口与父单元进行了良好的解耦。我们现在可以进一步改进 <todo-item> 组件,提供更为复杂的模板和逻辑,而不会影响到父单元。
在一个大型应用中,有必要将整个应用程序划分为组件,以使开发更易管理

<div id="app">
  <app-nav></app-nav>
  <app-view>
    <app-sidebar></app-sidebar>
    <app-content></app-content>
  </app-view>
</div>

组件与自定义元素的关系

你可能已经注意到 Vue 组件非常类似于自定义元素——它是 Web 组件规范的一部分,这是因为 Vue 的组件语法部分参考了该规范。例如 Vue 组件实现了 Slot API 与 is 特性。但是,还是有几个关键差别:

  • Web 组件规范仍然处于草案阶段,并且未被所有浏览器原生实现。相比之下,Vue 组件不需要任何 polyfill,并且在所有支持的浏览器 (IE9 及更高版本) 之下表现一致。必要时,Vue 组件也可以包装于原生自定义元素之内。
  • 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‘

那么对 的改动将不会触发任何视图的更新。如果你知道你会在晚些时候需要一个属性,但是一开始它为空或不存在,那么你仅需要设置一些初始值。比如:

data: {
  newTodoText: ‘‘,
  visitCount: 0,
  hideCompletedTodos: false,
  todos: [],
  error: null
}

我们也可以使用ES6标准中提供的一个方法Object.freeze(),其方法作用就是冻结对象,对对象中的属性进行修改无效。也即是会阻止修改现有的属性,也意味着响应系统无法再追踪变化

var obj = {
  foo: ‘bar‘
}

Object.freeze(obj)

new Vue({
  el: ‘#app‘,
  data () {
    return {
      obj
    }
  }
})
<div id="app">
  <p>{{ obj.foo }}</p>
  <!-- 这里的 `obj.foo` 不会更新! -->
  <button @click="obj.foo = ‘baz‘">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(‘example‘) // => true

// $watch 是一个实例方法
vm.$watch(‘a‘, function (newValue, oldValue) {
  // 这个回调将在 `vm.a` 改变后调用
})

实例生命周期钩子

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

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

new Vue({
  data: {
    a: 1
  },
  created: function () {
    // `this` 指向 vm 实例
    console.log(‘a is: ‘ + this.a)
  }
})
// => "a is: 1"

也有一些其它的钩子,在实例生命周期的不同阶段被调用,如 mountedupdated 和 destroyed。生命周期钩子的 this 上下文指向调用它的 Vue 实例。

不要在选项属性或回调上使用箭头函数,比如 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 之类的错误。

生命周期图示

下图展示了实例的生命周期。你不需要立马弄明白所有的东西,不过随着你的不断学习和使用,它的参考价值会越来越高。

注:特别有用

转自:https://www.cnblogs.com/moqiutao/p/8258353.html

原文地址:https://www.cnblogs.com/kennyliu/p/9719570.html

时间: 2024-10-16 08:00:18

Vue教程:简介(一)的相关文章

Vue.js简介

Vue.js简介 Vue.js的作者为Evan You(尤雨溪),任职于Google Creative Lab,虽然是Vue是一个个人项目,但在发展前景上个人认为绝不输于Google的AngularJs,下面我会将Vue与Angular(Angular 1.0+版本)做一些简单的比较. Vue的主要特点就和它官网(http://cn.vuejs.org/)所介绍的那样: (1) 简洁 (2) 轻量 (3)快速 (4) 数据驱动 (5) 模块友好 (6) 组件化 简单 下面看一段Angular的实

vue教程3-05 vue组件数据传递、父子组件数据获取

vue教程3-05 vue组件数据传递 一.vue默认情况下,子组件也没法访问父组件数据 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="bower_components/vue/dist/vue.js"><

vue教程2-08 自定义键盘信息、监听数据变化vm.$watch

vue教程2-08 自定义键盘信息 @keydown.up @keydown.enter @keydown.a/b/c.... 自定义键盘信息: Vue.directive('on').keyCodes.ctrl=17; Vue.directive('on').keyCodes.myenter=13; @keydown.a/b/c.... <input type="text" @keydown.c="show"> 自定义键盘信息: Vue.directi

vue教程1-04 事件 v-on:click=&quot;函数&quot;

vue教程1-04 事件 v-on:click="函数"   v-on:click/mouseout/mouseover/dblclick/mousedown..... 实例:为data添加数据 实例,点击按钮,div显示/隐藏切换 实例,vue实现简易留言本 事件: v-on:click="函数" v-on:click/mouseout/mouseover/dblclick/mousedown..... new Vue({ el:'#box', data:{ //

vue教程推荐

vue 2.x系列在线交互式教程: vue教程 vue教程全面系统地讲解最新的前端框架Vue.js 2.x,内容涵盖响应式计算机制.指令和组件.动画效果等诸多方面,教程深入浅出,即适合没有Vue.js开发基础的前端初学者学习,也适合具备一定基础的工程师深入学习提高. vuex教程 vuex教程全面系统地讲解最新的前端框架Vuex 2.x,内容涵盖state/mutation等核心概念.状态管理的工作原理.Vuex实践应用等诸多方面,教程深入浅出,即适合没有使用过状态管理库的前端开发人员学习,也适

01.01教程简介01.02软件的基本工作界面01.03模型设计的一般过程

xue.taoao.com 我的学习记录 01.01教程简介 --- 01.02软件的基本工作界面 - 任务窗口 拖拽到实例中 - 底部显示单位 - 确定当前环境 - 放大缩小 - 鼠标旋转缩放移动 --- 01.03模型设计的一般过程 ----- 原有凸台基础上    插入一个凸台 进入草图环境  选择原有凸台的一个面为基准面   空格  正视于    画一个圆形 - 智能尺寸-标注并且同时设置尺寸 - - 拉伸切 和凸台一样     拉伸切除-选择基准面进入草图   正视于  画圆  给定深

Vue框架简介,实例成员,事件,过滤器,文本、事件和属性指令

目录 Vue框架简介,实例成员,事件,过滤器,文本.事件和属性指令 什么是Vue 为什么要学Vue 如何使用Vue Vue实例成员 1.el: 实例 2.data: 数据 3.methods: 方法 Vue事件 面向对象js Vue过滤器 Vue指令 文本指令 事件指令 属性指令 Vue框架简介,实例成员,事件,过滤器,文本.事件和属性指令 什么是Vue vue框架:渐进式JavaScript框架 ? vue一个环境:可以只控制页面中一个标签,可以控制一组标签,可以控制整个页面,可以控制整个项目

Vue.js 实战教程 V2.x(2)Vue.js简介

2.1 Vue.js概述 Vue (读音 /vju?/,类似于 view) 是一套用于构建用户界面的渐进式框架. Vue.js官网的截图(2019年7月) 易用 会HTML.CSS.JavaScript就可以构建应用. 灵活 可以在一个库和一套完整框架之间自如伸缩. 高效 20kB运行大小,超快虚拟 DOM,最省心的优化 2.2与React对比 React官网的截图(2019年7月) 性能 React 和 Vue 都是非常快的. 优化 在 Vue 应用中,组件的依赖是在渲染过程中自动追踪的,所以

Vue 教程:轻量级 JavaScript 框架

Vue v2.0.0-rc.5 发布了,Vue.js 是构建 Web 界面的 JavaScript 库(基础教程qkxue.net),提供数据驱动的组件,还有简单灵活的 API,使得 MVVM 更简单. 本次发布一些新特性: Custom directives now get a new hook: inserted, which will be called when the bound element has been inserted into its parent node. (Note