学学vue-1

news2024/12/30 2:56:29

vue

0 安装

  • node.js,以及cnpm(npm超时或者被屏蔽,安装cnpm国内镜像)

    查看安装版本(是否安装成功)
    node -v
    安装成功之后也会安装npm
    npm -v
    cnpm镜像
    npm install -g cnpm --registry=http://registry.npm.taobao.org
    
  • 在vscode中装vue-offical扩展,点击install之后浏览器跳转到vscode

  • 注:需要vscode,试验创建文件是.html后缀

1 基础

1.1 创建一个简单vue实例

vscode编辑一个.html文件,然后!+Tab补全

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
1.2 创建vue实例 初始化渲染
  • 1,准备容器:div+容器

  • 2,引包:官网引包(生产和开发版本有区别)(vue2(停止维护)v3(默认))

    • 测试的需要警告的是否使用开发版本

      <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
      
    • 最终上线不需要警告等使用生产的版本上线

  • 3,创建实例:new Vue()

  • 4。添加配置项 => 完成渲染:

    • el:指定挂载节点,选择器指定控制那个盒子
    • data:给指定的盒子提供数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
<!-- 
    创建vue实例 初始化渲染
    1,准备容器
    2,引包
    3,创建实例
    4。添加配置项 => 完成渲染 
 -->
<div class="box2"></div>
<div class="box"></div>

<div id="app">
<!-- 用于编写未来的代码逻辑 -->
 <h1>{{ msg }}</h1>
 <a href="#">{{ count }}</a>
</div>

<!-- 引入开发版本的包 - 包含完整的注释和警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>

<script>
    // 一旦引入vuejs核心包,在全局环境就有了vue构造函数
    const app = new Vue({
        //通过el配置选择器,指定vue是哪个盒子
        el: '#app',
        //通过data提供渲染的数据
        data: {
            msg: 'hello 测试数据',
            count: 200
        }
    })
</script>


</body>
</html>
1.3 插值表达式 {{}}

插值表达式是Vue的一种模板语法

作用:利用表达式进行插值,表达式可以是求值代码js引擎会将其计算出结果

语法{{ 表达式 }}

注意:使用的数据必须存在、支持表达式不能使用判断关键字、不能在属性中使用插值

    <div class="box">
        <p>{{ name }}</p>
        <p>{{ name.toUpperCase() }}</p>
        <p>{{ name + 'hello'}}</p>
        <p>{{ age >= 18 ? 'y' : 'n'}}</p>
    </div>

    <script>
        const box = new Vue({
            el: '#box',
            data: {
                name: 'tony',
                age: 18
            }
        })
    </script>
1.4 Vue响应式特性

什么是响应式??

  • 响应式:数据修改,视图自动更新(F12控制台可以直接修改,视图可以直接变化,以后可以通过信号例如,按钮、提交表单等进行修改数据,但是底层原理就是相同的)
    在这里插入图片描述

数据—>修改数据—>vue监听到数据修改—>自动更新视图/Dom操作—>视图界面

聚焦于数据—>数据驱动视图,使用Vue开发只关注业务核心逻辑,根据业务修改数据即可

如何修改或者访问数据???

data数据最终会被添加到实例上

  1. 访问数据:“实例.属性名”
  2. 修改数据:“实例.属性名” = “值”
1.5 开发者工具

chrome的工具Vue.js Devtools_6.6.3_Chrome插件下载_极简插件 (zzzmh.cn)。下载之后在浏览器插件中打开开发者模式,然后拖拽进去这个插件,然后在插件详情中打开允许访问浏览器地址(在edge中安装叫做允许访问URL)然后就设置好了在启动vue程序之后f12查看网页元素最后可以看到一个vue的选项卡,经常使用可以放到前面。

在这里插入图片描述

Root:代表当前渲染的根实例(可以通过下列的数据修改直接更新数据,视图会实时更新)
在这里插入图片描述

<div id="box2">
	{{msg}}
</div>
<script>
	const box2 = new Vue({
		el: '#box2',
		data: {
            msg: 'hello world',
            count: 100
        }
    })
</script>
1.6 Vue指令

Vue指令会根据不同的指令,针对标签实现不同的功能,指令带有v-前缀的特殊标签属性

vue指令标签属性解释
v-html动态解析标签将div不识别的标签置入网页当中变成网页标签
v-show控制元素显示隐藏(频繁切换使用)v-show=‘'表达式‘’,true显示,false隐藏
v-if控制元素显示隐藏(条件渲染使用)与show不同,show可以在网页元素看到,if满足条件才渲染其余情况不显示
v-else控制元素显示隐藏和v-if相反,同时v-if/v-else显示一个
v-else-if条件判断语句和v-if/v-else一起组成switch case语句
v-on注册事件=监听条件+提供处理逻辑简写@事件名,事件触按照设置的处理方式处理
v-bind动态设置html的标签属性src、url、title等,简写:属性名,(插值表达式是不允许写在标签中的)
v-for基于数据进行循环,多次渲染元素便利数组、对象、数字v-for=“(item, index) in array”
v-for的 :key给元素添加唯一标识默认原地修改元素,修改了元素的标签元素前移,盒子不变添加后key后会全删
v-model给表单元素使用,双向数据绑定v-model = ‘变量’,在输入框和f12修改都会影响数据,快速设置表单元素内容
vue是数据驱动的数据变化,视图自动更新v-model实现视图变化数据自动更新
<div id="box3">
    <div v-html="msg"></div>
</div>
<script>
    const box3 = new Vue({
        el: '#box3',
        data: {
            msg: '<a href="https://baidu.com">测试网页链接(百度)</a>'
        }
    })
</script>

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

<style>

</style>
<div id="app">
    <div class="box">v-show控制的盒子</div>
    <div class="box">v-if控制的盒子</div>
</div>

<script>
    const app = new Vue({
        el: '#app',
        data: {
            flag: false
        }
    })
</script>

在这里插入图片描述

在这里插入图片描述

<body>
    
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
   
    <style>
        .box {
            margin: auto;
            width: 50%;
            border: 3px solid green;
            padding: 10px;
            text-align: center;
        }
        .btn {
            width: 67%;
            border: 3px solid yellowgreen;
            padding: 16px;
            text-align: center;
        }
    </style>
    <div id="app">
        <div v-show='flag' class="box">v-show控制的盒子</div>
        <div v-if='flag' class="box">v-if控制的盒子</div>
        <div v-else class="box">v-else控制的盒子</div>
        <button v-on:click="doThis" class="btn">btn</button>
    </div>
    
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                flag: false
            }
        })
    </script>

</body>

v-on

    </style>
    <div id="app">
        <div class="box">
            <button @click="fn">控制显示隐藏</button>
            <h3 v-show="flag">自动贩卖机</h3>
            <button @click="qs">汽水5元</button>
            <button @click="buy(8)">桃子</button>
            <button @click="cfe">coffee10元</button>
        </div>
        <p>剩余钱数:{{ money }}元</p>
        <button @click="sub()">-</button>
        <span>{{money}}</span>
        <button @click="money++">+</button>
    </div>

    
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                money: 100,
                money2: 200,
                flag: true
            },
            methods: {
                fn(){
                    this.flag = !this.flag
                },
                qs(){
                    app.money -= 5
                },
                cfe(){
                    this.money -= 10
                },
                buy(price){
                    // console.log(price)
                    this.money -= price
                },
                sub(){
                    this.money--
                }
            }
        })
    </script>

v-for

<ul>
    <li v-for="(item, index) in list">{{ item }} - {{ index }}</li>
    <li v-for="item in list">{{ item }}</li>
</ul>
<script>
    data: {
        money: 100,
        money2: 200,
        flag: true,
        list: ['汽水5块', '桃子8块', 'coffee10块']
    }
</script>

注意项

  • v-for中的:key只能是数字或者字符串类型,需要具有唯一性。推荐使用id作为key不推荐使用index,因为index 是会变化的

v-model

在这里插入图片描述

在这里插入图片描述

<div id="app">
    账户:<input type="text" v-model="username"> <br><br>
    密码:<input type="password" v-model="password"> <br><br>
    <button @click="login()">登录</button>
    <button @click="reset()">重置</button>
</div>

联系测试部分的完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
   
    <style>
        .box {

            width: 50%;
            border: 3px solid green;
            padding: 10px;
            text-align: center;
        }
        .btn {
            margin: auto;
            width: 67%;
            border: 3px solid yellowgreen;
            padding: 16px;
            text-align: center;
        }
    </style>
    <div id="app">
        账户:<input type="text" v-model="username"> <br><br>
        密码:<input type="password" v-model="password"> <br><br>
        <button @click="login()">登录</button>
        <button @click="reset()">重置</button>
        <div class="box">
            <button @click="fn()">控制显示隐藏</button>
            <h3 v-show="flag">自动贩卖机</h3>
            <button @click="qs()">汽水</button>
            <button @click="buy(8)">桃子</button>
            <button @click="cfe()">coffee</button>
            <ul>
                <li v-for="(item, index) in list">{{ item }} - {{ index }}</li>
                <li v-for="(item, index) in booklist" :key="item.id">
                    <span>书名:{{ item.name }}</span>
                    <span>书作者:{{ item.author }}</span>
                    <button @click="del(item.id)">delete</button>
                    <button @click="buy(20)">买了</button>
                </li>
            </ul>
        </div>
        <p>剩余钱数:{{ money }}元</p>
        <button @click="sub()">-</button>
        <span>{{ money }}</span>
        <button @click="money++">+</button>
    </div>

    
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                username: '',
                password: '',
                money: 100,
                money2: 200,
                flag: true,
                list: ['汽水5块', '桃子8块', 'coffee10块'],
                booklist: [
                    {id: 1, name: '《红楼梦》', author: '曹雪芹'},
                    {id: 2, name: '《西游记》', author: '吴承恩'},
                    {id: 3, name: '《水浒传》', author: '施耐庵'},
                    {id: 4, name: '《三国演义》', author: '罗贯中'}
                ]
            },
            methods: {
                fn(){
                    this.flag = !this.flag
                },
                qs(){
                    app.money -= 5
                },
                cfe(){
                    this.money -= 10
                },
                buy(price){
                    // console.log(price)
                    this.money -= price
                },
                sub(){
                    this.money--
                },
                del(id){
                    console.log('删除', id)
                    this.booklist = this.booklist.filter(item => item.id !== id)
                },
                login(){
                    console.log(this.username, this.password)
                },
                reset(){
                    this.username = ''
                    this.password = ''
                }
            }
        })
    </script>

</body>
</html>

运行效果:

在这里插入图片描述

1.x 错误汇总
div元素标签配置错误导致vue元素显示失败
<div id="box">    <!-- js -->
<div class="box"> <!-- css -->
开发者工具安装在edge上的时候不显示安装插件

插件需要安装在程序启动都的浏览器上,普通的使用浏览器和程序启动的浏览器似乎插件隔离。至少实验下来edge是这样的,插件应该是chrome的毕竟网址是chrome的,暂不了解chrome是否会出现这个问题。

可以将程序启动之后复制本地连接到解压过插件的浏览器浏览,就可以正常使用插件,程序打开的浏览器,有可能没有插件,每次在这个地方安装以后可能还需要安装

在使用@click组件过程中调用methods函数过程失效

如果失效首先看看是不是有函数名称等写错了,出现错误:methods写成method,这么写在数据元素中不会报错,但是在实际运行的过程中会导致函数失灵

如果确定没有出现错误,就可以参考网上的原生组件部分的内容,例如在click后面加上.native,变成原生组件可能会好使

参考文献

vue2官方文档:https://v2.cn.vuejs.org/v2/api
黑马程序员vue教程:https://www.bilibili.com/video/BV1HV4y1a7n4/

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

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

相关文章

spring如何解决bean的循环依赖

通过三级缓存解决循环依赖问题。 其中一级缓存用于存储完整的bean&#xff1b;二级缓存用于存储已经完成aop动态代理的bean&#xff0c;防止重复创建动态代理&#xff1b;三级缓存存储未实现aop动态代理和为实现依赖注入的bean。getBean()时先从一级缓存取&#xff0c;没有取二…

s3c2440---PWM使用之蜂鸣器驱动移植

一、蜂鸣器驱动介绍 1.1.什么是蜂鸣器 蜂鸣器是一种简单的声响发生器&#xff0c;常用于电子产品中作为警示或提醒作用。其基本原理是通过交替改变直流电的电压方向来产生声音&#xff0c;一般使用交替电流产生声音会比较稳定。 1.2.蜂鸣器的类别 1.有源蜂鸣器 1&…

2024 数学建模高教社杯 国赛(A题)| “板凳龙”舞龙队 | 建模秘籍文章代码思路大全

铛铛&#xff01;小秘籍来咯&#xff01; 小秘籍团队独辟蹊径&#xff0c;运用等距螺线&#xff0c;多目标规划等强大工具&#xff0c;构建了这一题的详细解答哦&#xff01; 为大家量身打造创新解决方案。小秘籍团队&#xff0c;始终引领着建模问题求解的风潮。 抓紧小秘籍&am…

嵌入式S3C2440:控制LED灯

发光二极管接口&#xff08;左端&#xff09;应为低电平 以LED1为例 LED1的接口为GPB5 void led_init(void) {//配置GPB5功能为输出GPBCON & ~(0x3 << 10);GPBCON | (0x1 << 10); //使GPB5输出高电平(关灯)GPBDAT | (1 << 5); }void led_on(void) {GPB…

【重学 MySQL】十一、SQL 概述

【重学 MySQL】十一、SQL 概述 SQL 背景知识产生与发展主要特点主要应用SQL语言的发展趋势 SQL 语言排行榜SQL 分类数据查询语言&#xff08;DQL, Data Query Language&#xff09;数据操纵语言&#xff08;DML, Data Manipulation Language&#xff09;数据定义语言&#xff0…

产品图片小程序开发:全方位指导,让产品展示更出色

想要快速开发并上线一个展示产品图片的小程序吗&#xff1f;乔拓云平台是您的理想选择。只需简单几步&#xff0c;即可打造专属的小程序平台。 首先&#xff0c;访问乔拓云官方网站&#xff0c;注册并登录您的账号。在小程序后端&#xff0c;您可以自由探索丰富的模板库&#x…

Leetcode每日刷题之155.最小栈

1.题目解析 本题是实现一个栈并且要实现其中的插入、删除、返回栈顶元素、返回最小元素的函数&#xff0c;这里主要的难点就是返回最小元素的函数&#xff0c;如果我们直接遍历&#xff0c;那么时间复杂度就是O(N)&#xff0c;但是题目要求我们需要在常数时间也就是O(1)的时间复…

shell 控制台显示彩色文字的方法

在shell脚本中,如果我们希望在控制台能显示带颜色的文字, 那就需要使用shell中的色彩专用变量代码来进行. shell中的各种颜色代码定义 # 颜色定义 BLACK"\033[0;30m" DARK_GRAY"\033[1;30m" BLUE"\033[0;34m" LIGHT_BLUE"\033[1;3…

vscode中全局代码片段怎么改名字

在使用vscode定义自己的代码片段的时候&#xff0c;有几个选项&#xff0c;如果我们选择了 vue.json 的文件定义代码片段&#xff0c;那么只能在 vue 文件中使用该片段&#xff0c;并且是 vue 文件中没有写其他代码的时候&#xff0c;如果 vue 文件中写了其他代码&#xff0c;那…

2024 小米芯片笔试

题型&#xff1a;单选题 时间&#xff1a;40分钟 知识点设计&#xff1a;数电&#xff08;很多&#xff09;、模电&#xff08;很多&#xff09;、电路(很多)、V&#xff08;4-5道&#xff09;、SV&#xff08;1道&#xff09; 感觉&#xff1a;&#xff1f;&#xff1f;&am…

Chrome extension 谷歌浏览器插件 YouTube 监听地址栏 url 变化

一、前言 最近在开发一个 YouTube 视频 AI 总结的插件&#xff0c;过程中遇到了一个问题&#xff0c;每次用户点击当前页面其它视频时&#xff0c;组件并不会重新挂载&#xff0c;这就导致视频明明都变了&#xff0c;但是总结依旧还是上次的内容&#xff0c;很影响体验。 为…

2024年全国大学生数学建模竞赛(C题) 建模解析|农作物的种植策略|小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮200人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;实现综合建模。独创复杂系统视角&#xff0c;帮助你解决国赛的难关呀。 完整内容可以…

OpenHarmony轻松玩转GIF数据渲染

OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;提供了Image组件支持GIF动图的播放&#xff0c;但是缺乏扩展能力&#xff0c;不支持播放控制等。今天介绍一款三方库——ohos-gif-drawable三方组件&#xff0c;带大家一起玩转GIF的数据渲染&#xff0c;搞…

【Java】Spring-AOP与拦截器实战 (上手图解)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述四、解决方案&#xff1a;4.1 认识依赖4.2 使用AOP与拦截器4.2.1 使用AOP4.2.1.1 设置DemoAop类4.2.2.2 设…

Linux驱动环境配置

Linux驱动环境配置 1.u-boot烧录2.Linux设置3.u-boot命令4.u-boot环境变量相关命令5.tftp安装与配置6.nfs7.配置网络环境变量8.tftp下载9.nfs挂载根文件系统 1.u-boot烧录 1.打开J-Flash 2.打开工程(Open Project) 3.Open data file 4.设置起始地址0x0 5.选择Target-Conne…

【Java毕业设计】基于SpringBoot+Vue+uniapp的农产品商城系统

文章目录 一、系统架构1、后端&#xff1a;SpringBoot、Mybatis2、前端&#xff1a;Vue、ElementUI4、小程序&#xff1a;uniapp3、数据库&#xff1a;MySQL 二、系统功能三、系统展示1、小程序2、后台管理系统 一、系统架构 1、后端&#xff1a;SpringBoot、Mybatis 2、前端…

【学术会议征稿】第三届智慧能源与电气工程国际学术会议(SEEE 2024)

第三届智慧能源与电气工程国际学术会议&#xff08;SEEE 2024&#xff09; 2024 3rd International Conference on Smart Energy and Electrical Engineering(SEEE 2024) 在双碳目标背景下&#xff0c;能源行业正在面临着绿色低碳转型的巨大挑战。随着我国产业结构全面调整&am…

show命令监控分析mysql实例信息

文章目录 思维导图show 查看数据库实例相关信息SHOW VARIABLES 分析数据库当前变量设置分析连接数据分析线程数分析慢查询变量分析缓存相关分析字符集相关SHOW STATUS 数据库当前实时状态分析分析连接数据分析线程数分析慢查询分析查询缓存分析排序使用情况分析文件打开数思维导…

09-03 周二 ansible部署与使用指南

09-03 周二 ansible部署与使用指南 时间版本修改人描述2024年9月3日10:08:58V0.1宋全恒新建文档&#xff0c;2024年9月4日13:57:25v0.2宋全恒调整结构&#xff0c;添加ansible-playbook和ansible-inventory 简介 首先要找一个跳板机&#xff0c;来确保所有的机器都可以访问。然…

OpenAI gym‘s breakout-v0 “pauses“

题意&#xff1a;OpenAI Gym 的 breakout-v0 “暂停” 问题背景&#xff1a; While training in the OpenAI gym environment I have the idea that the environment sometimes "stops". For many frames in a row no ball is visible/stops spawning. 在 OpenAI G…