前言

用了这么久的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

Vue教程:简介(一)相关推荐

  1. ChatGPT AI生成的VUE教程博客大纲

    以下内容为AI生成 , 仅供参考学习 Vue教程博客的大纲 1. Vue.js 简介:了解 Vue.js 的概念和特点 2. 安装和配置:如何在你的项目中使用 Vue.js 3.Vue 模板语法:学习 ...

  2. VUE教程(持续更新中)

    VUE教程 目录 1. VUE简介 1-1. 技术发展的过程: 2. 使用VUE框架 2-1. 构建你的第一个VUE程序 2-2.VUE核心原理 2-3. VUE组件 2-4. 工程结构 1. VUE ...

  3. vue教程2-03 vue计算属性的使用 computed

    vue教程2-03 vue计算属性的使用 computed computed:{b:function(){ //默认调用getreturn 值}}--------------------------c ...

  4. GBDT(MART) 迭代决策树入门教程 | 简介 .

     GBDT(MART) 迭代决策树入门教程 | 简介 2013-12-23 16:26 2802人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: 数据挖掘相关(13) 作者同类文章X GB ...

  5. MoveIt!入门教程-简介

    转载: http://www.ncnynl.com/archives/201610/1028.html MoveIt!入门教程-简介 说明 MOVEit!是目前针对移动操作最先进的软件. 它结合了运动 ...

  6. 【高性能计算背景】《并行计算教程简介》翻译 - 中文 - 3 / 4

    目录 一.写在前面 二.摘要 A. 并行计算概述 1. 什么是并行计算? 2. 为什么使用并行计算? 3. 谁在使用并行计算? B. 概念和术语 1. 冯诺依曼计算机体系结构 2. 弗林分类法 3. ...

  7. LLVM 极简教程: 第一章 教程简介与词法分析器

    第一章 教程简介与词法分析器¶ 原文: Tutorial Introduction and the Lexer 教程介绍 欢迎走进"LLVM开发新语言"教程.本教程详细介绍了一门简 ...

  8. Vue教程(八)v-bind指令动态绑定

    Vue教程(八)v-bind指令动态绑定 v-bind动态绑定 <!DOCTYPE html> <html lang="en"> <head>& ...

  9. Symfony Vue 教程

    Symfony Vue 教程展示了如何使用 Vue 前端创建一个简单的 Symfony 应用. Symfony Symfony 是一组可重用的 PHP 组件和一个用于 Web 项目的 PHP 框架. ...

  10. vue教程——13 Vuex

    vue教程--13 Vuex 一 什么是Vuex? 二 vuex核心组成模块 三 vuex初体验 四 getter用法----------怎么获取state中的值呢?(B组件怎么获取并监听state的 ...

最新文章

  1. 最全正則表達式汇总—想要的都有了
  2. Codeforces 352B - Jeff and Periods
  3. imx6背光驱动调试
  4. 单播、广播、组播、多播
  5. jaxb 映射 空字段_推土机:将JAXB对象映射到业务/域对象
  6. Struts2_模块包含 及Action总结
  7. 关于sass(scss)、less、postcss、stylus等的用法与区别
  8. php gaufrette,php – 使用Gaufrette Stream Wrappers和AsseticBundle
  9. [Servlet] 初识Servlet
  10. 去重 属性_Javascript算法 — 数组去重
  11. 梨花众创 - 微信支付宝收款二维码合并器
  12. catia之车灯设计
  13. Java计算同比环比
  14. 海马汽车经销商管理系统技术解析(四)保养管理
  15. Redis大批量插入数据
  16. 客户端timewait
  17. 计算机网络第一章1-28答案,北邮计算机网络 第一章 课后题答案
  18. php逐行的读取文件内容
  19. 直播需要多大的网络带宽?
  20. Android应用市场上架管理

热门文章

  1. dxComponentPrinter记录
  2. mybatis 传参是 liststring 的注意事项
  3. Linux内核分析——进程的描述和进程的创建
  4. 023 -uniApp
  5. 手写深浅拷贝(js)
  6. echarts-for-react的使用详解
  7. Flutter 页面滚动吸顶详解(NestedScrollView)
  8. TypeScript泛型约束
  9. 详解用backgroundImage解决图片轮播切换
  10. honeywell新风系统控制面板说明_详解装了新风系统,怎么清洗维护简单?