• 【vue讲解:介绍、插值语法、文本指令、事件指令、属性指令、style和class、条件渲染】


    1 vue介绍

    1.1 前端发展历史

    # 1.HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 -> 在浏览器中查看
    
    # 2.Ajax的出现 -> 后台发送异步请求,Render+Ajax混合
    
    # 3.单用Ajax(加载数据,DOM渲染页面):前后端分离的雏形
    
    # 4.Angular框架的出现(1个JS框架):出现了“前端工程化”的概念(前端也是1个工程、1个项目)
    
    # 5.React、Vue框架:当下最火的2个前端框架(Vue:国人喜欢用,React:外国人喜欢用)
    
    # 6.移动开发(Android+IOS) + Web(Web+微信小程序+支付宝小程序) + 桌面开发(Windows桌面):前端 -> 大前端
    
    
    # 7.一套代码在各个平台运行(大前端):谷歌Flutter(Dart语言:和Java很像)可以运行在IOS、Android、PC端
    
    # 8.在Vue框架的基础性上 uni-app:一套编码 编到10个平台
    
    # 9.在不久的将来 ,前端框架可能会一统天下
    

    1.2 vue介绍

    # Vue介绍
    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架
    与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用
    Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合
    
    # 渐进式框架
    可以一点一点地使用它,只用一部分,也可以整个工程都使用它
    
    # 网站
    版本:vue2  vue3
       
    官网:https://cn.vuejs.org/
    文档3:https://cn.vuejs.org/
    文档2:https://v2.cn.vuejs.org/
    
    
    # 2.Vue特点
       易用
       通过 HTML、CSS、JavaScript构建应用
       灵活
       不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸缩。
       高效
       20kB min+gzip 运行大小
       超快虚拟 DOM
       最省心的优化
    

    1.3 M-V-VM架构

    #1 后端架构: MTV  MVC
    #2 mvvm   前端vue架构
    	M:model 数据层
        V:view 用户视图层
        VM:viewmodel 连接数据和视图的中间层
    

    1.4 单页面应用-组件化开发

    # 组件化开发
    	可以把公用的 样式html,写成组件
        后期可以共用
        
    # 单页面应用---》spa--》signel page application
    	-vue项目---》整个vue项目只有一个 页面  index.html
        
    

    1.5 开发前端-编辑器选择

    # 主流
    	webstorm  :跟pycharm是一家  jetbrains公司的
        vscode: 免费,微软
        sublimetext:收费
        
    # 后端来讲
    	pycharm :跟webstorm是一个东西
        可以直接在pycharm上装个插件,可以开发vue
        
        
    # pycharm 对vue没有语法提示--》装个vue插件即可
    	-装完后要重启
    

    1.5 vue快速使用

    
    # vue 就是js框架---》渐进式---》
    # 新建一个  xx.html--->引入vue(跟之前引入jq一模一样)
    # 写vue语法,实现操作
    
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
        <script src="./js/vue.js">script>
    
    head>
    <body>
    <div id="app">
    
        {{name}}
    div>
    body>
    
    <script>
        var vm=new Vue({
            el: '#app',  // 管理了哪个标签
            data: {     // 数据
                name: '彭于晏'
            }
        })
        // 只要data中name变量变化了,页面就会变化
    script>
    html>
    

    2 插值语法

    # 1 插值语法---》渲染变量
    	{{}} ---{{ 变量、js语法、三目表达式,函数加括号 }}
    
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
        <script src="./js/vue.js">script>
    
    head>
    <body>
    <div id="app">
        <p>姓名:{{name}}p>
        <p>年龄:{{age}}p>
        <p>数组显示:{{list1}}p>
        <p>数组取值:{{list1[1]}}p>
        <p>对象显示:{{obj1}}p>
        <p>对象取值:{{obj1.name}}p>
        <p>对象取值:{{obj1['age']}}p>
        <p>显示标签:{{link1}}p>
        <p>简单js:{{4 + 5 + age}}p>
        <p>三目运算符:{{score > 90 ? '优秀' : '不优秀'}}p>
    
    div>
    body>
    
    <script>
        //条件?符合:不符合
        // var score=99
        // var s=score>90?'优秀':'不优秀'
        // console.log(s)
    
    
        var vm = new Vue({
            el: '#app',
            data: {
                name: 'lqz', // 字符串
                age: 18, // 数子
                list1: [1, 2, 3, 4],   // 数组
                obj1: {name: '彭于晏', age: 19}, // 对象
                link1: '百度一下 你就知道',
                score: 99
            }
        })
    script>
    html>
    

    3 文本指令

    # vue 的指令系统
    	-1 写在标签上
        -2 以 v- 开头 都称之为vue的指令,有特殊含义
        
    # 文本指令主要用来操作文本
    	v-text:把文字渲染到标签内
        v-html:把文字渲染到标签内,如果是标签会渲染标签
        v-show:控制标签显示与否,隐藏
        v-if:控制标签显示与否,真的删除
       
    
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
        <script src="./js/vue.js">script>
    
    head>
    <body>
    <div id="app">
    
        <h3>v-text:引号中放的跟之前插值放的一样h3>
        <p v-text="name">p>
        <div v-text="name">div>
        <h3>v-html:引号中放的跟之前插值放的一样,能把标签渲染h3>
        <div v-html="s">div>
    
        <h3>v-show :控制标签显示与否 没有删除标签,只是隐藏 display: none;h3>
        <img src="./img/1.jpg" v-show="show" height="300px" width="200px">
    
        <h3>v-if :控制标签显示与否 直接把标签删除h3>
        <img src="./img/2.png" v-if="if_show" height="300px" width="200px">
    div>
    body>
    
    <script>
    
    
        var vm = new Vue({
            el: '#app',
            data: {
                name: '彭于晏',
                s: '点我看美女',
                show: true,
                if_show: true
    
            }
        })
    script>
    html>
    

    4 事件指令

    # 点击,双击,滑动,输入 事件
    
    # 目前先讲点击事件
    	v-on:事件名='handleChange'
        v-on:click ='handleChange'
        简写成(用的多)
        @click='handleChange'
        方法必须放在methods中
          methods: {
                handleChange: function () {
                    this.show = !this.show  // ! 取反
                }
            }
    
    
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
        <script src="./js/vue.js">script>
    
    head>
    <body>
    <div id="app">
        
        <button @click="handleChange">点我显示隐藏美女button>
        <hr>
        <img src="./img/1.jpg" alt="" v-show="show" width="200px" height="300px">
        <hr>
        <h2>事件指令之参数问题:正常有几个参数就传几个参数即可h2>
        <p @click="handleP(name)">点我带参数p>
        <hr>
        <p @click="handleP">点我(如果方法要参数但没传,会自动把当前事件对象传入)p>
        <hr>
        <p @click="handleP('lqz',19)">点我(有几个参数传几个参数)p>
        <hr>
        <p @click="handleP('lqz')">点我(少传参数)p>
        <hr>
        <p @click="handleP('lqz',19,'asdfa','asdfa')">点我(多传参数)p>
    
    div>
    body>
    
    <script>
    
    
        var vm = new Vue({
            el: '#app',
            data: {
                show: true,
                name:'lqz'
            },
            methods: {
                handleChange: function () {
                    this.show = !this.show  // ! 取反
                },
                handleP: function (name, age) {
                    console.log(name)
                    alert('你的名字是:' + name + "你的年龄是:" + age)
    
                }
            }
        })
    script>
    html>
    

    5 属性指令

    # 控制属性的
    v-bind:属性名='值'
    # 可以简写成
    :属性='值'
    
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
        <script src="./js/vue.js">script>
    
    head>
    <body>
    <div id="app">
    
        <img :src="img" alt="" height="300px" width="200px">
        <p :id="p_id">我是pp>
    
        <hr>
        <h1>换美女案例h1>
        <button @click="handleChange">换一张button>
        <br>
        <img :src="img_change" alt="" height="300px" width="200px">
    
    div>
    body>
    
    <script>
    
    
        var vm = new Vue({
            el: '#app',
            data: {
                img: './img/1.jpg',
                p_id: 'xx',
                img_change: './img/1.png',
                // list1: ['./img/1.png', './img/2.png', './img/3.png', './img/4.png', './img/5.png', './img/6.png']
            },
            methods: {
                // handleChange: function () {
                //     // 随机从list1中拿一个值:
                //     // 1 统计数组长度,出一个随机数在0--数组长度直接--》生成0---6之间的整数
                //     //Math.random() // 生成0-1之间的小数
                //     // Math.random() * this.list1.length  // 1--数组长度直接的一个小数
                //     // Math.ceil(Math.random() * this.list1.length)  // 随机0--数组长度直接的数字
                //     // 2 数组[随机数]
                //     var c = Math.floor(Math.random() * this.list1.length)
                //     console.log(c)
                //     this.img_change = this.list1[c]
                // }
                handleChange: function () {
                    var c = Math.ceil(Math.random() * 6)
                    this.img_change = `./img/${c}.png`
                }
    
            }
        })
    script>
    html>
    

    6 style和class

    #  class  style 
    
    # 小案例:属性指令控制class
    

    6.1 属性指令控制class

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
        <script src="./js/vue.js">script>
    
        <style>
            .red {
                background-color: red;
            }
    
            .green {
                background-color: green;
            }
        style>
    head>
    <body>
    <div id="app">
    
        <button @click="handleChangeBack">点我切换背景色button>
        <div :class="back">
            我是div
        div>
    
    div>
    body>
    
    <script>
    
    
        var vm = new Vue({
            el: '#app',
            data: {
                back: 'green',
            },
            methods: {
                handleChangeBack: function () {
                    this.back = this.back == 'red' ? 'green' : 'red'
    
                }
            }
        })
    script>
    html>
    

    6.2 style和class可以绑定的数据类型

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
        <script src="./js/vue.js">script>
    
        <style>
            .background {
                background-color: pink;
            }
    
            .fontsize {
                font-size: 60px;
            }
    
            .back {
                color: green;
            }
        style>
    head>
    <body>
    <div id="app">
        <h1>class可以绑定的类型h1>
        <button @click="hancleCilck1">点我字符串形式button>
    
        <div :class="str_class">
            我是div
        div>
        <hr>
        <button @click="hancleCilck2">点我数组形式button>
    
        <div :class="list_class">
            我是div
        div>
        <button @click="hancleCilck3">点我对象形式button>
    
        <div :class="obj_class">
            我是div
        div>
        <hr>
        <h1>style可以绑定的类型h1>
        <button @click="hancleCilck4">字符串形式button>
    
        <div :style="str_style">
            我是div
        div>
    
        <button @click="hancleCilck5">数组形式button>
    
        <div :style="list_style">
            我是div
        div>
        <button @click="hancleCilck6">对象形式button>
    
        <div :style="obj_style">
            我是div
        div>
    
    div>
    body>
    
    <script>
    
    
        var vm = new Vue({
            el: '#app',
            data: {
                // class 可以绑定的类型
                // 1 字符串形式
                str_class: 'background',
                // 2 数组形式(常用的)
                list_class: ['background'],
                // 3 对象形式
                obj_class: {'background': true, 'fontsize': false},
    
                // style
                //1 字符串形式
                str_style: 'background-color: yellow',
                // 2 数组形式
                list_style: [{'background-color': 'yellow'}],
                // 3 对象形式(更合适)
                // obj_style: {'background-color': 'pink', 'color': 'red'}
                // js的key可以去掉 '',但是中间有 - 要转成驼峰
                obj_style: {backgroundColor: 'pink', color: 'red'}
            },
            methods: {
                hancleCilck1: function () {
                    this.str_class = this.str_class + ' fontsize'
                },
                hancleCilck2: function () {
                    this.list_class.push('fontsize')
                    // this.list_class.pop()
                },
                hancleCilck3: function () {
                    this.obj_class.fontsize = true
                },
                hancleCilck4: function () {
                    this.str_style = this.str_style + ';font-size: 60px'
                },
                hancleCilck5: function () {
                    this.list_style.push({'font-size': '40px'})
                },
                hancleCilck6: function () {
                    // 对象新增加的属性,vm监控不到,就无法实现 响应式
                    // 对象中原来有的属性,修改是能监控到
                    // this.obj_style['font-size'] = '90px'
                    //this.obj_style['background-color']='green'
    
                    // 原来对象中没有的值,就能监控到了---》如果改了对象没有影响到页面--》vm没有监控到--》就使用Vue.set
                    // Vue.set(this.obj_style, 'font-size', '90px')
                    this.obj_style['color'] = 'green'
                }
            }
        })
    script>
    html>
    

    7 条件渲染

    #  v-if  v-else-if  v-else
    	就是判断,符合哪个条件,就显示哪个标签
    
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
        <script src="./js/vue.js">script>
    
    
    head>
    <body>
    <div id="app">
    
        <p v-if="score>=90&&score<=100">优秀p>
        <p v-else-if="score>=70&&score<90">良好p>
        <p v-else-if="score>=60&&score<70">及格p>
        <p v-else>不及格p>
    
    div>
    body>
    
    <script>
    
    
        var vm = new Vue({
            el: '#app',
            data: {
                score: 91
            },
        })
    script>
    html>
    

    在这里插入图片描述

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
        <script src="./js/vue.js">script>
    
    
    head>
    <body>
    <div id="app">
    
        <h1>用户信息h1>
        <p>用户名:{{userinfo.username}}p>
        <p>年龄:{{userinfo.age}}p>
        <p>用户类型:
            <span v-if="userinfo.userType==1">超级管理员span>
            <span v-else-if="userinfo.userType==2">普通管理员span>
            <span v-else>普通用户span>
    
    
        p>
    
    div>
    body>
    
    <script>
    
    
        var vm = new Vue({
            el: '#app',
            data: {
                userinfo: {username: 'lqz', age: 19, userType: 1}
            },
        })
    script>
    html>
    
  • 相关阅读:
    老师的经典口头禅,这一句最扎心
    awk:gawk,mawk,nawk的选项笔记221109
    01_SpringCloud Alibaba环境搭建
    Mysql高级篇学习总结14:子查询优化、排序优化、GROUP BY优化、分页查询优化
    Python系列:python中split如何使用
    ST/意法STTH1506DPI车规FRD,原厂渠道ASEMI代理
    测试开发基础,教你做一个完整功能的Web平台之环境准备
    菜单栏程序坞APP的实现2(全面优化)
    信号类型(雷达)——连续波雷达(二)
    全网唯一OpenCyphal/UAVCAN教程(8)libcanard介绍
  • 原文地址:https://blog.csdn.net/weixin_50556117/article/details/141067860