vue官方文档

知识储备

es6语法补充

  • let

    使用 var 声明的变量的作用域是全局。

    {
    var a = 1;
    }
    console.info(a); //

    例1:

    var arr = [];
    for (var i = 0; i < 10; i++) {
    arr[i] = function(){
    console.info(i);
    }
    }
    arr[6]();// var arr = [];
    for (let i = 0; i < 10; i++) {
    arr[i] = function(){
    console.info(i);
    }
    }
    arr[6]();//

    例2:

    let 声明的变量,它的作用域是定义时所在的块内。

    {
    let b = 2;
    }
    console.info(b); // Uncaught ReferenceError: b is not defined

    例:

    let 声明的变量不能重复声明。

    {
    let c = 3;
    let c = 4; // Uncaught SyntaxError: Identifier 'c' has already been declared
    }

    例:

  • const

    const 声明的变量需要立即初始化,不能重新赋值。

    const a = 1;
    a = 2; // Uncaught TypeError: Assignment to constant variable.

    例:

  • 模板字符串

    var a = 1,
    b = 2;
    var str = `a=${a},b=${b}`;
    console.info(str); // a=1,b=2

    例:

  • 箭头函数

    普通函数和箭头函数的定义对比。

    // 普通函数,无参
    var f1 = function(){
    return '123';
    } // 箭头函数,无参
    var f2 = () => '123';
    console.info(f2()); // // 普通函数,有参
    var f3 = function(a, b) {
    return a;
    }
    // 箭头函数,有参
    var f4 = (a, b) => a + b;
    console.info(f4(1, 2)); //

    例:

    普通函数和箭头函数使用 this 的对比。

    var person1 = {
    name: '张三',
    fav: function() {
    // 使用普通函数时,this指向的是当前调用对象。
    console.info(this); // {name: "张三", fav: ƒ}
    console.info(this.name); // 张三
    }
    }
    person1.fav(); var person2 = {
    name: '张三',
    fav: () => {
    // 使用箭头函数时,this指向的是定义时所在的变量,在这里也就是window。
    console.info(this); // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}
    console.info(this.name); // (空字符串)
    }
    }
    person2.fav();

    例:

    普通函数和箭头函数使用arguments的对比。

    var func1 = function() {
    console.info(arguments);
    } func1(1, 2, 3); // Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ] // 使用箭头函数时,arguments不能使用。
    var func2 = () => {
    console.info(arguments);
    } func2(1, 2, 3); // Uncaught ReferenceError: arguments is not defined

    例:

  • 对象的单体模式

    var person1 = {
    name: '张三',
    fav: function() {
    console.info(this);
    console.info(this.name);
    }
    }
    // person2.fav等价于person1.fav
    var person2 = {
    name: '张三',
    fav() {
    console.info(this); // {name: "张三", fav: ƒ}
    console.info(this.name); // 张三
    }
    } person2.fav()

    例:

  • 面向对象

    // 构造函数创建对象
    function Animal1(name,age) {
    this.name = name;
    this.age = age;
    }
    Animal1.prototype.showName= function(){
    console.info(this.name);
    } var dog1 = new Animal1('小黄',3);
    console.info(dog1); // Animal1 {name: "小黄", age: 3}
    dog1.showName(); // 小黄 // class创建对象
    class Animal2{
    constructor(name,age){
    this.name = name;
    this.age = age;
    }
    showName(){
    console.info(this.name);
    }
    } var dog2 = new Animal2('小黑',2);
    console.info(dog2); // Animal2 {name: "小黑", age: 2}
    dog2.showName(); // 小黑

    例:

npm操作

  • 初始化

    npm init
  • 安装模块

    以安装 jquery 为例:

    npm install jquery@[版本号,不写默认最高版本] --save
    npm install jquery@[版本号,不写默认最高版本] --save-dev #保存开发版本

    如果 install 失败,可先尝试 rebuild 操作如下:

    npm rebuild
  • 卸载模块

    以卸载 jquery 为例:

    npm uninstall jquery
  • 安装cnpm

    $ npm install -g cnpm --registry=https://registry.npm.taobao.org

Vue实例

创建一个Vue实例

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

var vm = new 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,
hideCompletedTodos: 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>
<!-- 这里的 `foo` 不会更新! -->
<button v-on:click="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"

也有一些其它的钩子,在实例生命周期的不同阶段被调用,如  mounted 、 updated  和  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 之类的错误。

生命周期图示

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

前端框架之Vue(1)-第一个Vue实例的更多相关文章

  1. 前端框架Vue------>第一天学习、Vue学习的路径、Vue官网(1)

    文章目录 1.学习目标 2.前端知识体系 2.1 前端三要素 2.2.MVVM 3.第一个Vue程序 4.Vue实例的生命周期 vue的官方文档:https://cn.vuejs.org/ 1.学习目 ...

  2. 【vue】创建一个vue前端项目,编译,发布

    npm: Nodejs下的包管理器. webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资源的合并和打包. vue-cli: 用户生成Vue工 ...

  3. 使用vue cli3新建一个vue项目

    写在最前 虽然身为一个java后端工作者,前端还是要沾点的,基于vue的火热,所以平常的工作中项目前端基本都是vue.这次就主要讲一讲vue项目的创建,并从vue的安装开始讲起,附带上我之前安装使用时 ...

  4. 安装Vue和创建一个Vue脚手架项目

    首先 安装node.js,安装成功可以在控制台输入[node --version ]查看node的版本,因为安装了node会自带npm所以我们可以用 [npm --version]查到npm版本  如 ...

  5. 如何利用vue脚手架创建一个vue项目

    1.安装node.js 2.打开命令行查看下npm和node是否都安装好 node -v npm -v 3.安装淘宝镜像cnpm $ npm install -g cnpm --registry=ht ...

  6. React 还是 Vue: 你应该选择哪一个Web前端框架?

    学还是要学的,用的多了,也就有更多的认识了,开发中遇到选择的时候也就简单起来了. 本文作者也做了总结: 如果你喜欢用(或希望能够用)模板搭建应用,请使用Vue    如果你喜欢简单和“能用就行”的东西 ...

  7. 基于Vue.js的uni-app前端框架结合.net core开发跨平台project

    一.由来 最近由于业务需要要开发一套公益的APP项目,因此结合所给出的需求最终采用uni-app这种跨平台前端框架以及.netcore快速搭建我们的项目,并且能做到一套代码跨多个平台. 当然在前期技术 ...

  8. Vue.js 学习笔记 第2章 数据绑定和第一个Vue应用

    本篇目录: 2.1 Vue实例与数据绑定 2.2 指令与事件 2.3 语法糖 学习任何一种框架,从一个Hello World应用开始是最快了解该框架特性的途径. 我们先从一段简单的HTML代码开始,感 ...

  9. Vue(一) 数据绑定和第一个Vue应用

    学习 Vue.js 最有效的方法是查看官网文档 数据绑定和第一个Vue应用 先从一段简单的 HTML 代码开始,感受 Vue.js 最核心的功能. <!DOCTYPE html> < ...

随机推荐

  1. mysql 冷热备份

    文章转自:http://www.linuxidc.com/Linux/2014-03/98710.htm 冷备份(OFF, 慢, 时间点上恢复)冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提 ...

  2. scala 模式匹配详解 2 scala里是怎么实现的?

    在这篇martin和另外两位模式匹配领域专家的论文里说了模式匹配的几种实现方式,以及scala是选择哪种方式来实现的.http://lampwww.epfl.ch/~emir/written/Matc ...

  3. .NET/C# 优化心得

    网上的优化千篇一律,遂干脆自己写一个,总结总结网上说的与自己的想法. 1.关于sql方面的优化,详见Mysql语句的优化 2.对于不常更新的网页,使用静态页,使用 cdn 加速. 3.关于主从同步,如 ...

  4. [转]CDN(内容分发网络)技术原理

    1. 前言 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加, 用户数量也在不断增加,受Web服务器的负荷和传输距离 ...

  5. python 中 try ...except

    捕捉异常 try: 下的代码段 即为 需要捕捉异常的代码段: except:  捕获某一模块的异常,须带异常模块名称,可带原因参数:except 下代码为该异常发生时,所执行的代码:一个try可对应多 ...

  6. Jenkins设置备份

    安装备份插件,系统管理-插件管理 可选插件搜索backup 备份 系统管理-Backup manager 设置备份路径 恢复

  7. Ubuntu将网卡名称eno160改为eth0并且设置静态IP

    修改配置文件/etc/default/grub GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0" 设置生效 update-grub ...

  8. [No000011B]为什么有些程序员悄无声息渡过35岁中年危机?

    今天分享是一些已经渡过中年危机的前辈们,看看从他们身上,是如何优雅的过渡的.如果想一直在程序这条路上走下去,建议读完.文章略长. 人物一:陈睿,前百度研发经理,携程定制旅游CTO 从程序员到架构师到管 ...

  9. iOS ARC编译器规则和内存管理规则

    iOS 开发当中,自动引用计数已经是标准的内存管理方案.除了一些老旧的项目或者库已经没有人使用手动来管理内存了吧. ARC无疑是把开发者从繁琐的保留/释放引用对象逻辑中解脱出来.但这并不是万事大吉了, ...

  10. Etcd+Confd实现Nginx配置文件自动管理

    一.需求 我们使用Nginx做七层负载均衡,后端是Tomcat.项目采用灰度发布方式,每次项目升级,都要手动先从Nginx下摘掉一组,然后再升级这组,当项目快速迭代时,手动做这些操作显然会增加部署时间 ...