vue初级

本文档是Vue.js的初级教程,介绍了Vue的基本概念和渐进式框架的特点。内容包括Vue的创建工程、导入资源,详细讲解了Vue的入门案例,如文本插值、表单绑定、条件判断等核心指令的使用。此外,还涵盖了Vue的生命周期和异步操作,适合前端初学者入门。
摘要由CSDN通过智能技术生成

Vue快速入门

Vue介绍

在互联网产品快速迭代的背景下,前端开发人员不仅要编写页面,还要通过ajax+js完成页面动态效果,压力较大。

为了解决这个问题,一款前端的渐进式框架==Vue==就诞生了。

==渐进式框架==:一个前端项目可以使用vue一两个特性,也可以整个项目都用vue。

入门案例

需求:视图Div获取input中输入的文字

创建工程

导入资源

js代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>01-入门案例</title>
​
</head>
<body>
    <h3>获取input中输入的文字</h3>
    <input type="text" id="myInput">
    <div style="border:red 1px solid; height: 25px;" id="myDiv"></div>
    <script>
        // 给input绑定键盘弹起事件
        document.getElementById('myInput').οnkeyup=function () {
            // 获取input文本框的值
            let val = this.value;
            // 显示到div中
            document.getElementById('myDiv').innerHTML=val;
        }
    </script>
​
</body>
</html>

vue代码

视图:负责页面渲染,主要由HTML+CSS构成。脚本:负责业务数据模型(Model)以及数据的处理逻辑。

步骤:

  1. 引入vue的js类库

  2. 编写视图

  3. 编写脚本

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>01-入门案例</title>
​
    <!--1.引入vue的js类库-->
    <script src="../js/vue-2.6.12.js"></script>
</head>
<body>
<!--2.将视图交给vue管理-->
<div id="app">
    <h3>获取input中输入的文字</h3>
    <input type="text" v-model="message">
    <div style="border:red 1px solid; height: 25px;">{{message}}</div>
</div>
​
<!--3.将js脚本vue管理-->
<script>
    const app = new Vue({
        el: '#app', // 管理视图,通过css选择器
        data:{  // 管理js变量(模型)
            message:''
        },
        methods:{ // 管理js方法(函数)
​
        }
    });
</script>
​
</body>
</html>

入门详解

  • html视图:视图用于展示Vue模型中的数据,定义时必须使用双标签

  • ==注意:不能使用body标签,通过使用div==

    <div id="app"></div>
  • Vue 核心对象:每一个 Vue 程序都是从一个 Vue 核心对象开始的。

    let app = new Vue({
     选项列表;
    });
  • 选项列表

    1. el选项:指定的vue控制视图区域。(根据css选择器获取)
    ​
    2. data选项:用于保存当前Vue对象中的数据。支持js的各种数据类型
    ​
    3. methods选项:用于定义方法。方法可以直接通过对象名调用,或者用this来调用(代表当前Vue对象)。
  • 数据绑定

    * 在视图部分获取脚本部分的数据: {{插值表达式}}

Vue常用指令【重点】

  • 指令:是带有 v- 前缀的特殊属性,不同指令具有不同含义。例如 v-html,v-if,v-for。

  • 使用指令时,通常编写在标签的属性上,值(内容)可以使用 JS 的表达式。

  • 常用指令:

文本插值

  • {{插值表达式}}:将数据输出到页面视图中

  • v-text:将数据输出到元素内部,如果输出的数据有HTML代码,会作为普通文本输出

  • v-html:将数据输出到元素内部,如果输出的数据有HTML代码,会被渲染

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue-2.6.12.js"></script>
​
</head>
<body>
<div id="app">
​
    <!--
        {{插值表达式}}:展示vue管理的变量
            缺点:网络波动,在等待期间直接显示插值表达式原文
        v-text:相当于js中innerText(文本)
        v-html:相当于js中innterHTML(超文本)
    -->
    插值表达式:{{message}} <br>
    v-text:<span v-text="message"></span> <br>
    v-html:<span v-html="message"></span> <br>
​
</div>
<script>
    setTimeout(function () {
        const app = new Vue({
            el:'#app', // 管理视图
            data:{ // 管理变量
                message:'<b>哈哈哈~~~</b>'
            },
            methods:{ // 管理方法
​
            }
        });
    },2000)
​
</script>
</body>
</html>

表单绑定

==表单:采集用户输入的数据,发送给服务器端==

* 插值表达式(包括v-text和v-html)可以看做是单向绑定,数据影响了视图渲染,但是反过来就不行
​
* v-model是双向绑定,视图(View)和模型(Model)之间会互相影响
​
* 目前v-model的可使用元素有:input、select、textarea
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue-2.6.12.js"></script>
​
</head>
<body>
<div id="app">
​
    <h3>姓名:</h3>
    <input type="text" v-model="username">
    <div>您写的姓名是:{{username}}</div>
​
​
    <h3>性别:</h3>
    <input type="radio" value="男" v-model="gender"> 男 <br>
    <input type="radio" value="女" v-model="gender"> 女 <br>
    <div>您选择的性别是:{{gender}}</div>
​
​
    <h3>爱好:</h3>
    <input type="checkbox" value="抽烟" v-model="hobbies">抽烟<br>
    <input type="checkbox" value="喝酒" v-model="hobbies">喝酒<br>
    <input type="checkbox" value="烫头" v-model="hobbies">烫头<br>
    <div>您选择的爱好是:{{hobbies}}</div>
​
​
    <h3>段位:</h3>
    <select v-model="level">
        <option value="">请选择</option>
        <option value="青铜">青铜</option>
        <option value="白银">白银</option>
        <option value="王者">王者</option>
    </select>
    <div>您选择的段位是:{{level}}</div>
​
​
</div>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            username:'', // 用户名
            gender:'', // 性别
            hobbies:[],// 爱好
            level:'' // 段位
        }
​
    })
</script>
</body>
</html>

小结

  1. 单向绑定:vue管理的模型修改,视图也就同步修改了

  2. 双向绑定:vue管理的视图(input、select、textarea)和模型,可以相互影响

绑定属性

* 对于HTML标签属性,如果想要动态传值,不能使用{{}},而应该使用专门的属性绑定语法
    标准语法:   v-bind:属性名="Vue中的变量"
    简写语法:         :属性名='Vue中的变量'
<!DOCTYPE html>
<html lang="zh-CN" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue-2.6.12.js"></script>
​
</head>
<body>
<div id="app">
​
    <h3>属性绑定基本使用</h3>
    改变图片的地址和大小<br>
    图片地址:
    <select v-model="imgSrc">
        <option value="../img/vue.png">vue</option>
        <option value="../img/lj.jpg">雷军</option>
    </select>
    图片宽度: <input type="text" v-model="imgWidth">
    <br>
    <img v-bind:src="imgSrc" :width="imgWidth">
​
</div>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            imgSrc: "../img/vue.png",
            imgWidth: "100px"
        },
    })
</script>
</body>
</html>

列表循环

* 在vue中使用v-for实现数组的遍历,格式如下:
* v-for="(item,index) in items"
    items:要遍历的List
    item: 每次遍历得到的临时变量
    index:每次遍历的索引,从0开始计数(可省略)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue-2.6.12.js"></script>
</head>
<body>
<div id="app">
​
    <!--
        for循环
            1)简单: user in userList
            2)完整:(user,index) in userList
    -->
    <ul>
        <li v-for="(user,index) in userList">{{user.name}} -- {{index}}</li>
    </ul>
</div>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            userList: [
                {id: 1, name: 'jack', address: '北京昌平'},
                {id: 2, name: 'lucy', address: '上海虹桥'},
                {id: 3, name: 'jerry', address: '天津宝坻'}
            ]
        }
    })
</script>
</body>
</html>

条件判断

* 语法:
    v-if="布尔表达式"
    v-else-if="布尔表达式"
    v-else
* 注意:
    v-else元素必须紧跟在带v-if或者v-else-if元素的后面,否则它将不会被识别
    v-if还可以和v-for联合使用,当二者出现在一起时,会先遍历再判断条件
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue-2.6.12.js"></script>
​
</head>
<body>
<div id="app">
    <!--从文本框输入成绩, 然后判断成绩是否及格  >=80:优秀 、60>=:及格   <60:不及格-->
    <h3>考试成绩练习</h3>
    请输入成绩:<input type="text" v-model="score"><br>
    你本次考试成绩:
    <span v-if="score>=80">优秀</span>
    <span v-else-if="score>=60">及格</span>
    <span v-else>不及格</span>
​
​
    <!--遍历users, 但是要求只显示性别为女的用户-->
​
    <!--
        v-if:如果满足条件显示,不满足不显示(页面不会渲染元素)
        v-show:如果满足调节键显示,不满足不显示(页面会渲染元素)
    -->
    <h3>用户列表</h3>
    <ul>
        <li v-for="user in users" v-if="user.gender=='女'">{{user}}</li>
    </ul>
​
    <ul>
        <li v-for="user in users" v-show="user.gender=='女'">{{user}}</li>
    </ul>
​
​
</div>
<script>
    const app = new Vue({
        el: '#app',
        data: {
            score: 15,
            users: [
                {name: 'jack', gender: '女'},
                {name: 'lucy', gender: '女'},
                {name: 'jerry', gender: '男'}
            ]
        }
    })
</script>
</body>
</html>

事件绑定

* 事件绑定
    1) 标准语法   v-on:事件名="js片段或函数名"   如果不想页面爆红,需要单独引入名称空间
    2) 简化语法   @事件名="js片段或函数名"       推荐使用
<!DOCTYPE html>
<html lang="zh-CN" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue-2.6.12.js"></script>
​
</head>
<body>
<div id="app">
    <b>数量:</b>
    <button @click="diff()">-</button>
    <span>{{num}}</span>
    <button v-on:click="num++">+</button>
</div>
<script>
    const app = new Vue({
        el: '#app',
        data: {// 成员变量
            num: 1
        },
        methods:{ // 定义方法
            diff(){
                console.log(this.num); // 输出成员变量
                if (this.num > 1) {
                    this.num--;
                }
            }
        }
    })
</script>
</body>
</html>

知识小结

<!--Vue对象模板-->
<script>
    const app = new Vue({
        el: "#app",// 管理视图(html+css)
        data: {}, // 管理模型(数据)
        methods: {} // 管理方法(函数)
    });
</script>
​
1. 单方向赋值
    html文本: <span v-text="" v-html="">{{插值表达式}}</span>
    html属性: <img :src="vue变量"/>
​
2. 双向绑定
    <input type="text" v-model="vue变量"/>
​
3. 遍历循环
    <li v-for="(item,index) in list"></li>
​
4. 判断
    <span v-if="表达式1"></span>
    <span v-else-if="表达式2"></span>
    <span v-else></span>
​
5. 事件绑定
    <a @click="js代码或函数"></a>

Vue高级使用【理解】

生命周期

生命周期经历的八个阶段

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue-2.6.12.js"></script>
</head>
<body>
<div id="app">
​
</div>
<script>
    const app = new Vue({
        el: '#app',
        data: {
​
        },
        methods: {
            find(){
                alert('查询后台数据。。。')
            }
        },
        // created是vue生命周期创建后触发的函数,与methods同级
        created(){
            // 类似于 window.onload
           this.find();
        }
​
    })
</script>
</body>
</html>

Vue异步操作

在Vue中发送异步请求,本质上还是AJAX。我们可以使用axios这个插件来简化操作!

常用方法

// 执行get请求
axios.get('/url?name=admin&password=123').then(resp=>{
    console.log(resp.data);
})
​
​
// 执行get请求参数比较多的时候
axios.get('/url',{
    params:{
        name: 'admin',
        password: '123'
    }
}).then(resp=>{
    console.log(resp.data);
})
​
​
//执行post请求
axios.post('/url', {
    name: 'admin',
    password: '123'
}).then(resp=>{
    console.log(resp.data);
})

Vue概念

* MVVM是Model-View-ViewModel的简写,它本质上就是MVC的改进版;MVVM就是将其中的View的状态和行为抽象化,让我们将视图UI和业务逻辑分开。
    - M: 即Model,模型,指的就是数据
    - V: 即View, 视图,指的就是页面
    - VM:即View-Model,指的是模型和数据的双向绑定(即view和Model互相影响,Model变了,view随之改变;view变了,Model也随之改变)
    
* MVC和MVVM的使用区别
    在MVC模式中,
        开发人员需要从后端获取到数据(Model),然后通过操作DOM渲染视图(View)。
        如果用户改变了视图(view),开发人员还需要再通过DOM获取改变之后的数据,同步到Model中。
    在MVVM模式中,
        Model和View是绑定的,Model变了,view自动变化;view变了,Model自动变化。
        因此,程序员只需要关注Model即可。
        
* 基于MVVM模式的前端框架三巨头:Vue、React、AngularJS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值