vue|Vue快速入门(上)


文章目录

  • Vue快速入门(上)(应急用)
    • 一、下载和导入Vue
    • 二、第一个Vue程序
    • 三、条件与循环
    • 四、处理用户输入(事件监听器)
    • 五、Vue实例
      • 5.1 $watch(当某个变量被修改后调用)
      • 5.2 生命周期
    • 六、模板语法
      • 6.1 文本
      • 6.2 原始HTML
      • 6.3 Attribute
      • 6.4 使用JavaScript表达式
      • 6.5 指令
      • 6.6 缩写
    • 七、计算属性和侦听器

Vue快速入门(上)(应急用) 一、下载和导入Vue 要想用vue,首先,我们肯定要引用vue的“依赖”。这里提供两种方法:
方法一、自己去官网下载vue.js文件
点击这里下载vue.js文件 (由于这里发送的是get请求,无法直接下载,所以你得把网站下的内容都复制出来然后放到一个空白的vue.js文件中再进行使用。)
方法二、使用在线的vue.js
src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js">

二、第一个Vue程序 学程序,首先当时是hello,world。直接贴源码:(源码的解析在源码下边)
Hello,World - 锐客网type="text/javascript" src="https://www.it610.com/js/vue.js" charset="UTF-8">
{ {message}}
type="text/javascript"> let app = new Vue({el:'#app', data:{message: "Hello,world" } });

解析:
type="text/javascript" src="https://www.it610.com/js/vue.js" charset="UTF-8">

这一句是引入我们的Vue,不用讲应该都能知道。
{ {message}}

这一段是定义我们的div的id为app,然后使用两个花括号{ {}}引用我们定义的data的属性。
type="text/javascript"> let app = new Vue({el:'#app', data:{message: "Hello,world" } });

这一段是最关键的,用Ajax来说,new Vue这一步其实就相当于$,然后el其实就是我们的element,#表示获取id值,直接写字符串是获取标签,.类名表示获取class。然后data就是他里面被赋值的变量。我们可以通过{ {变量名}}进行获取。
注意:vue的使用最好是放在body的最下边。否则可能会因为获取不到 id ,导致message没有正常渲染。
我们已经成功创建了第一个 Vue 应用!看起来这跟渲染一个字符串模板非常类似,但是 Vue 在背后做了大量工作。现在数据和 DOM 已经被建立了关联,所有东西都是响应式的。我们要怎么确认呢?打开你的浏览器的 JavaScript 控制台 (就在这个页面打开),并修改 app.message 的值,你将看到上例相应地更新。
vue|Vue快速入门(上)
文章图片

注意我们不再和 HTML 直接交互了。一个 Vue 应用会将其挂载到一个 DOM 元素上 (对于这个例子是 #app) 然后对其进行完全控制。那个 HTML 是我们的入口,但其余都会发生在新创建的 Vue 实例内部。
三、条件与循环 v-if 属性表示条件:
条件与循环 - 锐客网 type="text/javascript" src="https://www.it610.com/js/vue.js">
现在你能看到我了!
type="text/javascript"> let demo = new Vue({el:"#demo", data:{seen: true } });

显示:
vue|Vue快速入门(上)
文章图片

我们可以在console中把他的seen变为false,将它隐藏。
vue|Vue快速入门(上)
文章图片

循环语句也很简单,使用v-for标签遍历,指明遍历哪个变量,每个被遍历到的属性的变量即可。
循环语句 - 锐客网 type="text/javascript" src="https://www.it610.com/js/vue.js">
  • 学号:{ {item.id}}, 姓名:{ {item.name}}, 年龄:{ {item.age}}
type="text/javascript"> let demo = new Vue({el:"#List", data:{studentList:[ { id:'1001',name:'张三',age:18}, { id:'1002',name:'张三',age:18}, { id:'1003',name:'张三',age:18}, { id:'1004',name:'张三',age:18}, { id:'1005',name:'张三',age:18}, ] } });

结果:
vue|Vue快速入门(上)
文章图片

四、处理用户输入(事件监听器) 为了让用户和你的应用进行交互,我们可以用 v-on 指令添加一个事件监听器 ,通过它调用在 Vue 实例中定义的方法:
监听器 - 锐客网 type="text/javascript" src="https://www.it610.com/js/vue.js">
{ {message}}
type="text/javascript"> let demo = new Vue({el:"#onDemo", data:{count:0, message:'我是人见人爱的段落哟' }, methods:{updateMsg: function () {if(++this.count %2 == 0){this.message = '不管怎么样,我都是人见人爱的段落。' }else {this.message = '跟你说了我永远是人见人爱的段落了吧。' } } } })

显示:
vue|Vue快速入门(上)
文章图片

奇数次点击按钮显示:
vue|Vue快速入门(上)
文章图片

偶数次点击按钮显示:
vue|Vue快速入门(上)
文章图片

Vue 还提供了 v-model 指令,它能轻松实现表单输入和应用状态之间的双向绑定。
事件绑定 - 锐客网 type="text/javascript" src="https://www.it610.com/js/vue.js">
{ {message}}
type="text/javascript"> let demo = new Vue({el:"#demo", data:{message:'Hello' } })

运行:(p能读取input的内容并实时显示)
vue|Vue快速入门(上)
文章图片

五、Vue实例 5.1 $watch(当某个变量被修改后调用)
通过调用new Vue()返回的对象的$watch方法,在每次某个变量发生改变的时候
监听器 - 锐客网 type="text/javascript" src="https://www.it610.com/js/vue.js">
{ {message}}
type="text/javascript"> let demo = new Vue({el:"#onDemo", data:{count:0, message:'我是人见人爱的段落哟' }, methods:{updateMsg: function () {if(++this.count %2 == 0){this.message = '不管怎么样,我都是人见人爱的段落。' }else {this.message = '跟你说了我永远是人见人爱的段落了吧。' } } } }); //监听demo的count变量 demo.$watch('count', function (newVal, oldVal) {console.log("The oldVal of count is "+oldVal); console.log("The newVal of count is "+newVal); }); //监听demo的message变量 demo.$watch('message',function (newVal, oldVal) {console.log("The oldVal of message is "+oldVal); console.log("The newVal of message is "+newVal); });

结果:
vue|Vue快速入门(上)
文章图片

点击两次按钮后:
vue|Vue快速入门(上)
文章图片

vue|Vue快速入门(上)
文章图片

5.2 生命周期
直接看图就行了,没学过的如果看不懂的话也不要紧,等学差不多了再回来看一次就行了。
这里大概说一下:这里目前最主要的就是知道这些个方法(我们也叫钩子)在什么时候会被调用,比如
钩子 调用时间
beforeCreate 在Vue对象被创建前
created 在Vue对象被创建后
beforeMount 在el渲染成html之前
mounted 在el渲染成html之后
beforeUpdate 数据发生改变之前
updateed 数据发生改变之后
beforeDestroy 拆除watcher、子组件、事件监听器前
destroyed 拆除watcher、子组件、事件监听器后
vue|Vue快速入门(上)
文章图片

用法也比较简单,这里给出一个实例:
let demo = new Vue({el:"#onDemo", data:{count:0, message:'我是人见人爱的段落哟' }, created: function(){console.log("The count is "+this.count); console.log("The message is "+this.message); }, methods:{updateMsg: function () {if(++this.count %2 == 0){this.message = '不管怎么样,我都是人见人爱的段落。' }else {this.message = '跟你说了我永远是人见人爱的段落了吧。' } } }, });

六、模板语法 6.1 文本
数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:
{ { msg }}\
Mustache 标签将会被替代为对应数据对象上 msg 属性的值。无论何时,绑定的数据对象上 msg属性发生了改变,插值处的内容都会更新。
如果我们不希望这个值发生改变的话,那么我们可以给对应的标签加上v-once属性。(注意:这会影响到该节点上的其它数据绑定)
这个将不会改变: { { msg }}
6.2 原始HTML
【vue|Vue快速入门(上)】双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 指令:
原始HTML - 锐客网 type="text/javascript" src="https://www.it610.com/js/vue.js"> Using mustaches: { { rawHtml }}
> demo = new Vue({el:"#demo", data:{rawHtml: 'This should be red.' } })

结果:
vue|Vue快速入门(上)
文章图片

如果这么写:
Using v-html directive: v-html="rawHtml">

结果:
vue|Vue快速入门(上)
文章图片

注意:在我们自己的站点上动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击。请只对可信内容使用 HTML 插值,绝不要对用户提供的内容使用插值。
6.3 Attribute
Mustache 语法不能作用在 HTML attribute 上,遇到这种情况应该使用 v-bind 指令:

对于布尔 attribute (它们只要存在就意味着值为 true),v-bind 工作起来略有不同,在这个例子中:

如果 isButtonDisabled 的值是 null、undefined 或 false,则 disabled 参数甚至不会被包含在渲染出来的
type="text/javascript"> let demo = new Vue({el:"#onDemo", data:{count:0, message:'我是人见人爱的段落哟' }, created: function(){console.log("The count is "+this.count); console.log("The message is "+this.message); }, methods:{updateMsg: function () {if(++this.count %2 == 0){this.message = '不管怎么样,我都是人见人爱的段落。' }else {this.message = '跟你说了我永远是人见人爱的段落了吧。' } } }, }); //监听demo的count变量 demo.$watch('count', function (newVal, oldVal) {console.log("The oldVal of count is "+oldVal); console.log("The newVal of count is "+newVal); }); //监听demo的message变量 demo.$watch('message',function (newVal, oldVal) {console.log("The oldVal of message is "+oldVal); console.log("The newVal of message is "+newVal); });
从Vue的2.6.0版本开始,我们还可以用方括号括起来的 JavaScript 表达式作为一个指令的参数:
...

这里,如果我们的data中的attributeName值为"href",那么这个绑定将等价于 v-bind:href。然后url也是data中的属性值。
当然了,这种动态的参数表达式也是有约束的,某些字符,如空格和引号,放在 HTML 属性里是无效的。例如: ... ,这么写的话会触发一个编译警告,解决的方法自然是使用没有空格或引号的表达式,或用计算属性替代这种复杂表达式。
注意:在 DOM 中使用模板时 (直接在一个 HTML 文件里撰写模板),还需要避免使用大写字符来命名键名,因为浏览器会把 attribute 名全部强制转为小写:
比如这个 ... ,就会等价于 ...
6.6 缩写
v- 前缀作为一种视觉提示,用来识别模板中 Vue 特定的 attribute。当你在使用 Vue.js 为现有标签添加动态行为 (dynamic behavior) 时,v- 前缀很有帮助,然而,对于一些频繁用到的指令来说,就会感到使用繁琐。因此,对于 v-bind 和 v-on 这两个最常用的指令,Vue 还提供了特定缩写:
v-bind的如下:
...... ...

v-on的缩写如下:
...... ...

七、计算属性和侦听器 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。例如:
{ { message.split('').reverse().join('') }}

在这个地方,模板不再是简单的声明式逻辑。你必须看一段时间才能意识到,这里是想要显示变量 message 的翻转字符串。当你想要在模板中的多处包含此翻转字符串时,就会更加难以处理。
所以,对于任何复杂逻辑,我们都应当使用计算属性,将他们抽取出来变成一个“方法”。
计算属性 - 锐客网 type="text/javascript" src="https://www.it610.com/js/vue.js">
Original message: "{ { message }}"
Computed reversed message: "{ { reversedMessage }}"
随机数:{ {randomMessage}}
type="text/javascript"> var vm = new Vue({el: '#example', data: {message: 'Hello' }, //computed下方的就是一系列的计算属性的方法体啦! computed: {// 计算属性的 getter reversedMessage: function () {// `this` 指向 vm 实例 return this.message.split('').reverse().join('') }, randomMessage: function () {return Math.floor(Math.random()*100); } } })

结果:
vue|Vue快速入门(上)
文章图片

这里,有些人可能会说,那我把他写成一个方法,再调用不是一样吗?我们可以像下面这么写,这么写也是对的。那区别在哪里呢?答案是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。而如果我们写在methods下,并进行调用的话,他每次都会重新求值再返回。
计算属性 - 锐客网 type="text/javascript" src="https://www.it610.com/js/vue.js">
Original message: "{ { message }}"
Computed reversed message: "{ { reversedMessage }}"
Computed reversed message: "{ { reversedMessageFun() }}"
随机数:{ {randomMessage}}
type="text/javascript"> var vm = new Vue({el: '#example', data: {message: 'Hello' }, //computed下方的就是一系列的计算属性的方法体啦! computed: {// 计算属性的 getter reversedMessage: function () {// `this` 指向 vm 实例 return this.message.split('').reverse().join('') }, randomMessage: function () {return Math.floor(Math.random()*100); } }, methods:{reversedMessageFun : function(){return this.message.split('').reverse().join('') } } })

另外,当我们有一些数据需要随着其它数据变动而变动时,我们其实很容易滥用 watch——特别是如果你之前使用过 AngularJS。然而,通常更好的做法是使用计算属性而不是命令式的 watch 回调。
让我们来看看watch的写法:
{ { fullName }}
type="text/javascript"> let vm = new Vue({el: '#demo', data: {firstName: 'Foo', lastName: 'Bar', fullName: 'Foo Bar' }, watch: {firstName: function (val) {this.fullName = val + ' ' + this.lastName }, lastName: function (val) {this.fullName = this.firstName + ' ' + val } } })

但是如果我们用计算属性的话,就是:
{ { fullName }}
type="text/javascript"> let vm = new Vue({el: '#demo', data: {firstName: 'Foo', lastName: 'Bar' }, computed: {fullName: function () {return this.firstName + ' ' + this.lastName } } })

上面我们一直在用计算属性的getter,但是偶尔我们可能也会需要用他的set方法
// ... computed: {fullName: {// getter get: function () {return this.firstName + ' ' + this.lastName }, // setter set: function (newValue) {var names = newValue.split(' ') this.firstName = names[0] this.lastName = names[names.length - 1] } } } // ...

现在再运行 vm.fullName = ‘John Doe’ 时,setter 会被调用,vm.firstName 和 vm.lastName 也会相应地被更新。

    推荐阅读