前端学习--Vue(2)

news2025/2/24 6:52:24

一、Vue简介

1.1 概念

Vue是一套用于构建用户界面的前端框架

框架:现成解决方案,遵守规范去编写业务功能

指令、组件、路由、Vuex、vue组件库

1.2 特性

数据驱动视图

vue连接页面结构和数据,监听数据变化,自动渲染页面结构

数据变化会驱动视图自动更新

好处:程序员只管把数据维护好,Vue会自动渲染

是单向数据绑定:数据变化导致页面结构变化

双向数据绑定

form负责采集数据,ajax负责提交数据

双向数据流动:js中的数据填充到页面上需要操作dom;用户填写的数据取出来更新js对象也需要操作dom

填写表单时,双向数据绑定可以在不操作dom元素的前提下,自动把用户填写的内容同步到数据源中

 1.3 MVVM

Model 表示当前页面渲染时所依赖的数据源。

View 表示当前页面所渲染的 DOM 结构。

ViewModel 表示 vue 的实例,它是 MVVM 的核心,把页面的数据源和页面结构连接在一起。

1.4 版本

2.x 3.x

二、Vue基本使用

2.1 体验

    <div id="app">{{ username }}</div>
    <!-- 导入Vue的库文件,就有了Vue构造函数 -->
    <script src="./lib/vue-2.6.12.js"></script>
    <script>
        //创建Vue实例对象
        const app = new Vue({
            //当前的vue实例要控制页面的哪个区域,按照css选择器的格式
            el:'#app',
            // data对象就是要渲染到页面上的数据
            data:{
                username:'zhangsan'
            }
        })
    </script>

2.2 调试程序

2.3 指令

vue为开发者提供的模板语法,用于辅助开发者渲染页面的基本结构

按照不同用途分为以下几类:

内容渲染指令、数据绑定指令、事件绑定指令、双向绑定指令、条件渲染指令、列表渲染指令

2.3.1 内容渲染指令

v-text(几乎不用)会覆盖标签内部原本的内容

{{ }} 插值表达式 只是内容占位符

v-html 可以渲染html标签

    <div id="app">
        <p v-text="username">姓名</p>
        <p>性别:{{ gender }}</p>
        <p v-text="school">学校</p>
        <p v-html="info"></p>
        <p v-text="info"></p>
    </div>
    <script src="./lib/vue-2.6.12.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                username:'zhangsan',
                school:'Fudan',
                gender:'female',
                info:'<h4 style="color:hotpink;font-weight:bold;">大家好!</h4>'
            }
        })
    </script>

 2.3.2 属性绑定指令

v-bind 为元素属性动态绑定数据

    <div id="app">
        <input type="text" v-bind:placeholder="tips">
        <!-- v-bind:可以简写为: -->
        <img v-bind:src="photo" alt="" style="height:150px; width:150px;">
    </div>
    <script src="./lib/vue-2.6.12.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                tips:'啦啦啦',
                photo:'./images/猫咪.jpg'
            }
        })
    </script>

使用js表达式绑定数据

v-bind绑定的属性值双引号内直接按照js语法写

 2.3.3 事件绑定指令

v-on 用来辅助程序员为 DOM 元素绑定事件监听

    <div id="app">
        <p>count的值是 {{ count }}</p>
        <!-- 绑定事件可以通过()传参 -->
        <button v-on:click="add(2)"> +1 </button>
        <!-- v-on:可以简写为@ -->
        <button @click="sub"> -1 </button>
    </div>
    <script src="./lib/vue-2.6.12.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                count:1,
            },
            methods:{
                //定义事件处理函数
                add(n){
                    //修改data中的数据通过this
                    this.count+=n
                },
                sub(){
                    this.count-=1
                }
            }
        })
    </script>

$event vue提供的原生dom事件对象e

事件传参后,默认参数e会被覆盖,$event防止e被覆盖掉

    <div id="app">
        <button v-on:click="change($event, 1)"> 变色 </button>
    </div>
    <script src="./lib/vue-2.6.12.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                count:1,
            },
            methods:{
                change(e,n){
                    this.count += n
                    if(this.count % 2 === 0){
                        e.target.style.backgroundColor="pink"
                    }else{
                        e.target.style.backgroundColor="red"
                    }
                }
            }
        })
    </script>

2.3.4 事件修饰符

.prevent阻止默认行为(比如a的跳转)
.stop阻止事件冒泡
.capture以捕获方式触发当前事件的处理函数
.once绑定的事件只有1次
.self只有event.target是当前元素自身时触发事件处理函数
     <div id="app">
        <a href="http://www.baidu.com" @click.prevent="notJump">百度</a>
        <div class="box" @click="father">
            <button @click.stop="son">点我</button>
        </div>
    </div>
    <script src="./lib/vue-2.6.12.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                count:1,
            },
            methods:{
                notJump(){
                    console.log('dont jump')
                },
                son(){
                    console.log('click son')
                },
                father(){
                    console.log('click father')
                }
            }
        })
    </script>

2.3.5 按键修饰符

在监听键盘事件时,我们经常需要判断详细的按键。此时,可以为键盘相关的事件添加按键修饰符

    <div id="app">
        <input type="text" @keyup.a="keyA" @keyup.enter="clear">
    </div>
    <script src="./lib/vue-2.6.12.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                count:1,
            },
            methods:{
                keyA(){
                    console.log('按了a键哦')
                },
                clear(e){
                    e.target.value = ''
                }
            }
        })
    </script>

2.3.6 双向绑定指令

v-model

与v-bind注意区分,v-bind只能将数据传到页面,v-model也可以将页面变化传给数据

    <div id="app">
        <p>你好,我的名字是 {{ uname }}</p>
        <input type="text" v-model="uname">
        <input type="text" :value="uname">
    </div>
    <script src="./lib/vue-2.6.12.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                uname:'cat'
            }
        })
    </script>

v-model修饰符

.number将用户输入转换为数值类型
.trim自动过滤用户输入的首位空格符
.lazy在change时而非input时更新
    <div id="app">
        <input type="text" v-model.number="n1"> + <input type="text" v-model.number="n2">
        = <span>{{n1 + n2}}</span>
        <br>
        <input type="text" v-model.trim="uname">
        <button @click="getUname">获取用户名</button>
        <!-- .lazy类似防抖 -->
        <input type="text" v-model.lazy="uname">
    </div>
    <script src="./lib/vue-2.6.12.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                n1:1,
                n2:2,
                uname:'zs'
            },
            methods:{
                getUname(){
                    console.log(this.uname)
                }
            }
        })
    </script>


2.3.7 条件渲染指令

控制dom元素的显示和隐藏

v-if 动态增删元素 如果某些元素不要被展示,而且后期这个元素也不太需要被展示出来

v-show 操纵display属性 如果需要频繁切换,该指令性能更好

    <div id="app">
        <p v-if="flag">我是v-if</p>
        <p v-show="flag">我是v-show</p>
        <button @click="changeState">切换</button>
    </div>
    <script src="./lib/vue-2.6.12.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                flag:'ture'
            },
            methods:{
                changeState(){
                    this.flag = !this.flag
                }
            }
        })
    </script>
    

v-else-if  v-else

必须配合v-if一起使用 内容可以给判断条件

2.3.8 列表渲染

v-for

<div id="app">
        <ul>
            <!-- 使用v-for指令就一定要绑定:key属性 -->
            <!-- key必须是字符串或数字,并且不允许重复 -->
            <li v-for="i in list" :key="i.id">{{ i.id }}  {{ i.name }}</li>
        </ul>
    </div>
    <script src="./lib/vue-2.6.12.js"></script>
    <script>
        const app = new Vue({
            el:'#app',
            data:{
                list:[
                    {id:1,name:'andy'},
                    {id:2,name:'jack'},
                    {id:3,name:'rose'},
                    {id:4,name:'ben'}
                ]
            }
        })
    </script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/542017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue--》Vue 3 路由进阶——从基础到高级的完整指南

目录 Vue3中路由讲解与使用 路由的安装与使用 路由模式的使用 编程式路由导航 路由传参 嵌套路由 命名视图 重定向与别名 Vue3中路由讲解与使用 Vue 路由是 Vue.js 框架提供的一种机制&#xff0c;它用于管理网页上内容的导航。Vue 路由可以让我们在不刷新页面的情况下…

【ChatGPT】通过 ChatGPT 用文字描述来绘制插画

点击上方“独立开发者杂谈” 喜欢本文&#xff0c;请置顶或星标 使用文字描述绘制插画具有以下好处 无需绘画技巧&#xff0c;体验与AI结合&#xff0c;创意灵活性&#xff0c;节省时间。 使用 Figma 工具 Figma &#xff08;https://www.figma.com&#xff09;是一款流行的设计…

Linux:iptables防火墙

Linux&#xff1a;iptables防火墙 一、iptables防火墙概述1.1 iptables防火墙1.2 netfilter/iptables 关系 二、Linux防火墙基础2.1 iptables的表、链结构2.2 数据包控制的匹配流程 三、编写防火墙规则3.1 基本语法、控制类型3.2 添加、查看、删除规则等3.3 规则的匹配条件3.3.…

黑马Redis原理篇

黑马Redis原理篇 1、数据结构1.1、动态字符串SDS1.2、IntSet1.3、Dict1.4、ZipList1.5、QuickList1.6、SkipList1.7、RedisObject1.8、五种数据结构1. String&#xff08;小EMBSTR,大RAW (SDS),少量整数INT&#xff09;2. List&#xff08;Redis3.2之后使用QuickList实现&#…

CSDN周赛52期及53期浅析

好久没写题解了&#xff0c;没办法&#xff0c;C站的题目更新的速度太慢了&#xff0c;重复考过去的老题已经不能再进步了。52期还混了个名次&#xff0c;总要写篇文章完成一下任务。而53期就惨了去了&#xff0c;三道选择题全蒙错了。 反正我个人觉得在现在C站的OJ环境里考选…

手撸鉴权系统——SpringBoot2+Vue2(一定惊喜满满,万字长文)

初衷&#xff1a; 一直不太理解整个前后端的鉴权&#xff0c;跨域等问题&#xff0c;抽空两个晚上整理出万字文章&#xff0c;也是对于自己的一个交代&#xff0c;现在共享出来&#xff0c;希望大家也能受益&#xff0c;将使用过程在这里一一详述&#xff0c;还是多说一句&…

【图论(1)】图的存储、遍历与拓扑排序

5月16-5月18日学习内容 文章目录 一、图是什么二、图的存储1、直接存边法2、邻接矩阵法3、邻接表法4、链式前向星时间复杂度分析 三、图的遍历DFSBFS 四、拓扑排序&#xff08;今天实在没时间写了&#xff0c;明天写&#xff09; 一、图是什么 这是oi.wiki给的定义 简而言之…

ENVI制图——土地利用专题图

ENVI制图 0 前言1 数据准备2 数据预处理2.1 先在arcmap中把数据导出为tif格式&#xff0c;然后加入envi&#xff08;别问我为什么要先用arcmap处理&#xff0c;因为这是envi制图教程 :( &#xff09;2.2 直接把tif格式的数据拖进envi&#xff0c;此时看不到数据类别&#xff0c…

低代码+AI:助力企业数字化转型,揭示未来发展趋势

问个问题&#xff1a;你有没有亲自去了解、使用近期爆火的生成式人工智能——ChatGPT&#xff1f; 如果答案是否定的&#xff0c;作为企业数字化转型的前沿先锋小Z&#xff0c;建议你一定要去亲自尝试它。虽然人工智能技术已经发展多年&#xff0c;但OpenAI所发布的ChatGPT&…

瑞吉外卖 - 新增菜品功能(16)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

(十)Spring源码阅读:finishBeanFactoryInitialization方法

一、概述 该方法是实例化bean的主要方法&#xff0c;它实现的主要流程如下图所示。 这是方法执行的主要流程图。 具体执行流程如下图&#xff0c;我们将按照具体执行流程一个个介绍具体的方法。 二、主要方法 finishBeanFactoryInitialization内部调用了getBean方法。 getBea…

AIGC+机器人=具身智能?硅谷最酷的两个男人不谋而合预演“下个浪潮”

收集整理|小鱼新的AI题材层出不穷&#xff0c;这次轮到“机器人AI"融合而成的具身智能概念。 “硅谷钢铁侠"马斯克和热爱黑色皮衣的"显卡教父”黄仁勋均作出积极表态&#xff0c;可谓不谋而合。 当地时间5月16日&#xff0c;特斯拉2023年年度股东大会召开&…

unity DoTween动画插件的使用(最全)

DOTween是最常用的动画插件之一,比使用Unity自带脚本写动画,方便很多。 插件获取 untiy商店插件地址 https://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676 DOTween商城地址,开发文档 http://dotween.demigiant.com 导入和设置 DOTween首次使…

离散数学_九章:关系 —— 拓扑排序

拓扑排序 背景知识相容一个引理什么是拓扑排序 拓扑排序算法&#xff08;伪代码&#xff09;几个实例例1例2 假设一个项目由20个不同的任务构成。某些任务只能在其他任务结束之后完成。如何找到关于这些任务的顺序&#xff1f; 为了对这个问题建模&#xff0c;我们在任务的集合…

mysql强制修改mysql数据库密码(无需原密码)

1.创建新记事本new_password.txt 定位到记事本绝对路径&#xff0c;我直接放桌面 C:\Users\bao123\Desktop 为用户为 root 新密码 123456为例 ALTER user rootlocalhost identified by 123456; 为用户为 mytest 新密码 88888888为例 ALTER user mytestlocalhost identifi…

opencv_c++学习(十三)

一、创建滑动条 createTrackbar(const String & trackbarname, const String & winname, int* value, int count, onChange , TrackbarCallback 0, void * userdata 0)trackbarname:滑动条的名称。 winname:创建滑动条窗口的名称。 value:指向整数变量的指针&#xff0…

Harbor在arm架构下亲测编译成功

先安装好Docker,docker-compose 华为云arm架构安装Docker arm架构安装docker-compose Harbor官网: https://github.com/goharbor/harbor/releases Harbor官方没有提供arm架构的包,需要自己编译,我编译好的版本是:harbor-1.9.1 大家可以按我的博客,自己去编译,或评论留言给…

Vivado 下 LED 流水灯实验

目录 Vivado 下 LED 流水灯实验 1、实验简介 2、实验环境 3、实验原理 3.1、LED硬件电路 3.2、程序设计 4、Vivado 工程 4.1、创建工程 4.2、编写流水灯的 verilog代码 1. 点击 Project Manager 下的 Add Sources 图标&#xff08;或者使用快捷键 AltA&#xff09;。…

基于协同过滤的推荐算法

基于协同过滤的推荐算法 基于协同过滤&#xff08;CF&#xff09;的推荐基于近邻的协同过滤基于用户的协同过滤&#xff08;User-CF&#xff09;基于物品的协同过滤&#xff08;Item-CF&#xff09;User-CF 和 Item-CF 的比较基于协同过滤的推荐优缺点基于模型的协同过滤隐语义…

WoW 游戏软件

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 我们选择Tcp协议进行传输&#xff0c;之所以采用tcp,首先是因为tcp传输稳定&#xff0c;相比于udp不稳定的传输&#xff0c;tcp能确保消息一定传输出去。然后是tcp有服务器&#xff0c;相比于 p2p 无服务器模型&#xff0c;tc…