vue自学笔记


目录
  • 优点
  • 安装
    • 使用scirpt标签引入(入门)
    • CLI命令行工具搭建
  • 新建vue工程
    • 引入方式
  • 创建vue应用
    • 视图(html)
    • 脚本(js)
  • 数据与方法
    • 创建vue实例
    • 数据与方法
    • Vue的实例属性和方法
  • 生命周期
    • 实例生命周期钩子
      • vue初始化过程
      • 生命周期(常用)
      • 生命周期(涉及组件)
      • 生命周期图示
  • 模板语法
    • 插值
      • 文本
      • 原始html
      • 特性
        • v-bind
      • 使用JavaScript表达式
    • 指令
      • 参数
      • 修饰符
    • 缩写
      • v-bind
      • v-on
  • Calss与Style绑定
    • 数组语法
    • 对象语法
  • 条件渲染
    • v-if
      • v-if
      • template
      • v-else
      • v-else-if
      • key
    • v-show
    • v-if和v-show的区别
  • 列表渲染
    • 数组
      • v-for="item in items"
      • v-for="(item, index) in items"
    • 对象
      • v-for="value in object"
      • v-for="(value, key) in object"
      • v-for="(value, key, index) in object"
    • 维护状态
  • 事件处理
    • v-on
    • 事件修饰符
    • 绑定的事件
  • 表单输入绑定
    • v-model
      • 基础用法
      • 文本
      • 文本域
      • 复选框(数组)
      • 单选
      • 表单提交
  • 组件基础
    • 组件实例
  • 组件注册
    • 组件名
    • 组件名命名方式
      • kebab-case
      • PascalCase
    • 全局注册
    • 局部注册
  • 单文件组件
    • 使用单文件组件
  • 免终端开发VUE应用
    • cli方式
    • 使用uni-app +HBuilder X

优点

  1. 体积小 33k
  2. 运行效率高
    1. 基于虚拟dom
    2. 预处理
  3. 双向数据绑定
  4. 生态丰富,学习成本低

安装

使用scirpt标签引入(入门)

  • 下载并使用script标签引入(vue会被注册为一个全局变量)
  • 开发环境不要用压缩版本(会失去所有常见错误的相关警告)
  • 生产版本删除了警告

CLI命令行工具搭建

新建vue工程

  1. 下载开发版本的vue.js

  2. 将vue.js放入一个空的工程文件夹中

  3. 新建.html文件和.vue文件

  4. 在html文件中引入vue.js

    引入方式

    1. 下载到本地并引入

    2. CDN引入最新的vue.js

      
      
    3. 引入指定版本的vue.js

      
      
    4. 兼容 ES Module 的构建文件

      
      

创建vue应用

vue的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进DOM的系统

视图(html)

{{ message }}

常见文本插值 {{}}

脚本(js)

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})
  • 声明全局变量Vue,得到vue.js的对象
  • 参数:对象
  • 参数对象的属性
    • el
      • 元素
      • 利用id选择器选中div
      • '#app'必须是单引号
    • data
      • 数据
      • 注册变量,初始化变量

数据与方法

创建vue实例

  • 用vm接收对象实例(ViewModel 视图模型)

数据与方法

当一个 Vue 实例被创建时,它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中。当这些 property 的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。

// 我们的数据对象
var data = { a: 1 }

// 该对象被加入到一个 Vue 实例中
var vm = new Vue({
  data: data
})

// 获得这个实例上的 property
// 返回源数据中对应的字段
vm.a == data.a // => true

// 设置 property 也会影响到原始数据
vm.a = 2
data.a // => 2

// ……反之亦然
data.a = 3
vm.a // => 3
  • vm中的data为{ a: 1 },可以用vm.a,也可以用vm.$data.a
  • 只有在创建Vue对象时设置的数据才是响应式的
  • 创建Vue之后添加的属性将不再是响应式的。
  • 如果晚些添加属性的值,可以在初始化Vue对象的时候给该属性置空,以便之后修改。
var obj = {
  foo: 'bar'
}

Object.freeze(obj)

new Vue({
  el: '#app',
  data: obj
})
  • Object.freeze(obj) 可以阻止修改现有属性,数据将不再响应。

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
  • 会运行一些叫做生命周期钩子的函数,
    • 这给了用户在不同阶段添加自己的代码的机会。

生命周期(常用)

  • 要以属性的方式,写在传递的对象内
  • 值是一个函数
  • 函数不能使用箭头函数(箭头函数没有this)
  • 在运行的每个阶段,系统会自动调用对应的函数








{{msg}}

生命周期(涉及组件)

具体看API

  • actived

  • deactivated

  • beforeDestory

  • destory

  • errorCaptured

生命周期图示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g2aIjjXo-1650953238660)(D:\资料\typora\前端开发\vue\lifecycle.png)]

模板语法

插值

  • Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。

  • 所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析。

  • 在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。

如果你熟悉虚拟 DOM 并且偏爱 JavaScript 的原始力量,你也可以不用模板,直接写渲染 (render) 函数,使用可选的 JSX 语法。

  • 在标签中绑定时,直接在引号中写属性名

文本

  • 数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:
Message: {{ msg }}
  • v-once 这个将不会改变
  • 但请留心这会影响到该节点上的其它数据绑定:
这个将不会改变: {{ msg }}

原始html

  • 使用v-html使变量的值不再是字符串,而是html标签

var vm = new Vue({
	el : "#app",
	data : {
		rawHtml : 'this is should be red',
	}
});

特性

v-bind
  • 绑定属性值
test...
var vm = new Vue({
	el : "#app",
	data : {
		color:'red'
	}
});

使用JavaScript表达式

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

  • {{ number + 1 }} 简单运算

  • {{ ok ? 'YES' : 'NO' }} 三元运算符

    • ok为false 输出NO,否则输出YES
  • {{ message.split('').reverse().join('') }} 函数运算

    • 将字符串逐个拆分,反转,再拼接

指令

指令 (Directives) 是带有 v- 前缀的特殊 attribute。指令 attribute 的值预期是单个 JavaScript 表达式 (v-for 是例外情况,稍后我们再讨论)。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。

现在你看到我了

var vm = new Vue({
	el : "#app",
	data : {
		seen : false
	}
});

参数

...
var vm = new Vue({
	el : "#app",
	data : {
		url : "https://cn.vuejs.org/v2/guide/syntax.html#%E6%8C%87%E4%BB%A4"
	}
});

修饰符

修饰符 (modifier) 是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()

  • @click 绑定事件
  • .stop 修饰符 执行click2的时候,不执行click
click me
var vm = new Vue({
	el : "#app",
	data : {},
	methods:{
		click1 : function () {
			console.log('click1......');
		},
		click2 : function () {
			console.log('click2......');
		}
	}
});

缩写

v-bind


...


...


 ... 

v-on


...


...


 ... 

Calss与Style绑定

  • 数组语法

    v-bind:class="[ isActive ? 'active' : '', isGreen ? 'green' : '' ]"

  • 对象语法

    :style="{color:color, fontSize:size, background: isRed ? '#FF0000' : ''}">

	
hi vue
hi vue
var vm = new Vue({
	el : "#app",
	data : {
		isActive : true,
		isGreen : true,
		color : "#FFFFFF",
		size : '50px',
		isRed : true
	}
});

条件渲染

v-if

v-if

v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。

	
A
B
C
Not A/B/C
var vm = new Vue({
	el : "#app",
	data : {
		type : "B",
		ok : false
	}
});

template

因为 v-if 是一个指令,所以必须将它添加到一个元素上。但是如果想切换多个元素呢?此时可以把一个