Vue学习

Vue学习

  • 1. Vue概述
  • 2. 快速入门
  • 3. Vue 指令
    • 2.3.1 v-bind 和 v-model
    • 2.3.2 v-on
    • 2.3.3 v-if 和 v-show
    • 2.3.4 v-for
  • 4. 案例
  • 5. 生命周期


1. Vue概述

Vue 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,容易与其它库或已有项目整合。vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定组合的视图组件

2. 快速入门

  • 1) 在VS Code 中创建文件 Vue-入门.html,并在同级目录中创建js文件夹,将 vue.js 文件拷贝到 js 目录。

  • 2)在 Vue-入门.html 中引入 vue.js 文件

    
    
  • 3)在html区域编写视图,其中{{}}是插值表达式,是用来将vue对象中定义的model展示到页面上的。

    
        
    {{message}}
  • 4) 定义vue对象,代码如下:

    
    

    其中,有三个属性:

    • el: 用来指定哪些标签受 Vue 管理。 该属性取值 #app 中的 app 需要是受管理的标签的id属性值
    • data: 用来定义数据模型
    • methods: 用来定义函数。这个我们在后面就会用到。

    浏览器打开效果如图所示:
    Vue学习_第1张图片
    整体代码如下:

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Vue-快速入门title>
        <script src="js/vue.js">script>
    head>
    <body>
    
        <div id="app">
            <input type="text" v-model="message">
            {{message}}
        div>
    
    body>
    <script>
        //定义Vue对象
        new Vue({
            el: "#app", //vue接管区域
            data:{
                message: "Hello Vue"
            }
        })
    script>
    html>
    

3. Vue 指令

上述案例中出现了属性v-model,这个就是vue的指令
指令:HTML 标签上带有 v- 前缀的特殊属性,不同指令具有不同含义。例如:v-if,v-for…
在vue中,通过大量的指令来实现数据绑定到视图,如下表所示:

指令 作用
v-bind 为HTML标签绑定属性值,如设置 href , css样式等
v-model 在表单元素上创建双向数据绑定
v-on 为HTML标签绑定事件
v-if
v-else-if 条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else
v-show 根据条件展示某元素,区别在于切换的是display属性的值
v-for 列表渲染,遍历容器的元素或者对象的属性

2.3.1 v-bind 和 v-model

  • v-bind: 为HTML标签绑定属性值,如设置 href , css样式等。当vue对象中的数据模型发生变化时,标签的属性值会随之发生变化。
    接下来我们通过代码来演示:

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Vue-指令title>
        <script src="js/vue.js">script>
    head>
    <body>
        <div id="aa">
            <a v-bind:href="url">链接1a>
            <a :href="url">链接2a>
            <input type="text" v-model="url">
        div>
        
    body>
    <script>
        new Vue({
            el: "#aa",
            data: {
                url: "https://www.baidu.com"
            }
        })
    script>
    html>
    

    注意:v-bind: 可简写为: ,html属性前面有:表示采用的vue的属性绑定!

  • v-model: 在表单元素上创建双向数据绑定。什么是双向?

    • vue对象的data属性中的数据变化,视图展示会一起变化
    • 视图数据发生变化,vue对象的data属性中的数据也会随着变化。

    视图数据为什么会发生变化呢?只有表单项标签!所以双向绑定一定是使用在表单项标签上的
    双向绑定的作用:可以获取表单的数据的值,然后提交给服务器

2.3.2 v-on

v-on: 用来给html标签绑定事件的。需要注意的是如下2点:

  • v-on语法给标签的事件绑定的函数,必须是vue对象种声明的函数
  • v-on语法绑定事件时,事件名相比较js中的事件名,没有on

例如:在js中,事件绑定demo函数:


vue中,事件绑定demo函数


我们通过代码来演示:

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue-指令title>
    <script src="js/vue.js">script>
head>
<body>
    <div id="aa2">
        <input type="button" value="点我一下" v-on:click="handle()">
        <input type="button" value="点我一下" @click="handle()">
    div>
    
body>
<script>
    new Vue({
        el: "#aa2",
        data: {
            
        },
        methods: {
            handle: function(){
                alert("你点了我一下...");
            }
        }
    })
script>
html>

同样,v-on也存在简写方式,即v-on: 可以替换成@

2.3.3 v-if 和 v-show

我们直接通过代码来演示效果。

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue-指令-v-if与v-showtitle>
    <script src="js/vue.js">script>
head>
<body>
    <div id="app">
        
        年龄<input type="text" v-model="age">经判定,为:
        <span>年轻人(35及以下)span>
        <span>中年人(35-60)span>
        <span>老年人(60及以上)span>

        <br><br>
    div>
body>
<script>
    //定义Vue对象
    new Vue({
        el: "#app", //vue接管区域
        data:{
           age: 20
        },
        methods: {
            
        }
    })
script>
html>

其中采用了双向绑定到age属性,意味着我们可以通过表单输入框来改变age的值。
需求:
当我们改变年龄时,动态判断年龄的值,呈现对应年龄的文字描述。
可通过 v-if 指令编写如下代码:

年龄<input type="text" v-model="age">经判定,为:
<span v-if="age <= 35">年轻人(35及以下)span>
<span v-else-if="age > 35 && age < 60">中年人(35-60)span>
<span v-else>老年人(60及以上)span>

浏览器打开测试效果如下图:
Vue学习_第2张图片
如果我们修改 v-if 指令为 v-show 指令,代码如下:

年龄<input type="text" v-model="age">经判定,为:
<span v-show="age <= 35">年轻人(35及以下)span>
<span v-show="age > 35 && age < 60">中年人(35-60)span>
<span v-show="age >= 60">老年人(60及以上)span>

打开浏览器,可以发现,浏览器呈现的效果是一样的,但是浏览器中html源码不一样。
Vue学习_第3张图片
总结:
v-if指令,不满足条件的标签代码直接没了,而v-show指令中,不满足条件的代码依然存在,只是添加了css样式来控制标签不去显示。

2.3.4 v-for

从名字我们就能看出,这个指令是用来遍历的。其语法格式如下:

<标签 v-for="变量名 in 集合模型数据">
    {{变量名}}

需要注意的是:需要循环的那个标签,v-for 指令就写在那个标签上。
有时我们遍历时需要使用索引,那么 v-for 指令遍历的语法格式如下:

<标签 v-for="(变量名,索引变量) in 集合模型数据">
    
   {{索引变量 + 1}} {{变量名}}

不多说,直接代码演示:

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue-指令-v-fortitle>
    <script src="js/vue.js">script>
head>
<body>
	<div id="app">
	     <div v-for="addr in addrs">{{addr}}div>
	     <hr>
	     <div v-for="(addr,index) in addrs">{{index + 1}} : {{addr}}div>
	div>
body>
<script>
    //定义Vue对象
    new Vue({
        el: "#app", //vue接管区域
        data:{
           addrs:["北京", "上海", "西安", "成都", "深圳"]
        },
        methods: {
            
        }
    })
script>
html>

Vue学习_第4张图片

4. 案例

需求:通过 Vue 完成表格数据的渲染展示。
Vue学习_第5张图片
提前准备如下代码:

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue-指令-案例title>
    <script src="js/vue.js">script>
head>
<body>
    
    <div id="app"> 
        <table border="1" cellspacing="0" width="60%">
            <tr>
                <th>编号th>
                <th>姓名th>
                <th>年龄th>
                <th>性别th>
                <th>成绩th>
                <th>等级th>
            tr>
        table>
    div>

body>

<script>
    new Vue({
        el: "#app",
        data: {
            users: [{
                name: "Tom",
                age: 20,
                gender: 1,
                score: 78
            },{
                name: "Rose",
                age: 18,
                gender: 2,
                score: 86
            },{
                name: "Jerry",
                age: 26,
                gender: 1,
                score: 90
            },{
                name: "Tony",
                age: 30,
                gender: 1,
                score: 52
            }]
        },
        methods: {
            
        },
    })
script>
html>

思路:

  • 使用v-for的带索引方式添加到表格的标签上
  • 使用{{}}插值表达式展示内容到单元格
  • 使用索引+1来作为编号
  • 使用v-if来判断,改变性别和等级这2列的值

需求实现代码:

 <tr align="center" v-for="(user,index) in users">
     <td>{{index + 1}}td>
     <td>{{user.name}}td>
     <td>{{user.age}}td>
     <td>
         <span v-if="user.gender == 1">span>
         <span v-if="user.gender == 2">span>
     td>
     <td>{{user.score}}td>
     <td>
         <span v-if="user.score >= 85">优秀span>
         <span v-else-if="user.score >= 60">及格span>
         <span style="color: red;" v-else>不及格span>
     td>
tr>

在这里插入图片描述

5. 生命周期

vue的生命周期:指的是vue对象从创建到销毁的过程
vue的生命周期包含8个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法,这些生命周期方法也被称为钩子方法。其完整的生命周期如下图所示:

状态 阶段周期
beforeCreate 创建前
created 创建后
beforeMount 挂载前
mounted 挂载完成
beforeUpdate 更新前
updated 更新后
beforeDestroy 销毁前
destroyed 销毁后

其中我们需要重点关注的是 mounted ,其他的了解即可。
Vue学习_第6张图片
Vue学习_第7张图片
mounted:挂载完成,Vue初始化成功,HTML页面渲染成功。我们一般用于页面初始化自动的ajax请求后台数据
编写mounted声明周期的钩子函数,与methods同级,代码如下:

<script>
    //定义Vue对象
    new Vue({
        el: "#app", //vue接管区域
        data:{
           
        },
        methods: {
            
        },
        mounted () {
            alert("vue挂载完成,发送请求到服务端");
        }
    })
script>

完结

你可能感兴趣的:(前端,vue,前端,html)