【7】【vue】【vue3】

news2024/11/20 9:19:49

1、项目结构:

asserts用来存放静态资源的(一些图片,公共的css文件等)

components用来存放vue的组件(vue是组件开发)

 

App.vue是主入口组件 (根组件,所有组件都是从这里开始,从这里显示的)

 

main.js是主入口文件,(所有程序入口)

 

template可以理解是写html的

script可以理解为是写业务逻辑的

 

2、模板语法

目的:为了让标签里显示的数据从静态变为动态

语法:双花括号{{}}

步骤:

(1)写一个data函数(用来返回数据)


<script>
export default {
  name: 'HelloWorld',
  data(){
    return {
      message:"测试"
    }
  }
}
</script>

(2)用花括号引入数据

<template>
  <div class="hello">

    <h3>学习vue模板语法</h3>
    <p>{{message}}</p>

  </div>
</template>

结果

目的:为了识别标签里的链接

语法:在标签括号里加v-html 

其实就是超链接的做法 以下对比普通的和v-html属性的标签

<template>
  <div class="hello">

    <p>{{message}}</p>
    <div>{{rawHtml}}</div>
    <div v-html="rawHtml"></div>


  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data(){
    return {
      message:"测试",
      rawHtml:"<a href='http://www.itbaizhan.com'>百战</a>"
    }
  }
}

结果

目的:让标签里的属性也动态化

语法:在标签括号里加v-bind

 <div v-bind:id="dynamicId"></div>
    //v-bind:可以简写为一个冒号“:”
 <div :id="dynamicId"></div> 
export default {
  name: 'HelloWorld',
  data(){
    return {
      dynamicId:10001
    }
  }
}

Vue.js也支持JavaScript表达式支持

结果

 注意只支持表达式,不支持语句和流程空值(如赋值语句和if语句都不会生效)

3、条件渲染

目的:用于条件性地渲染一块内容。这块内容只会在指令的表达式返回true值的时候被渲染。

 语法:v-if=""

比如用来标记某个物品是否为新增的状态或者控制父级容器的显示和隐藏

export default {
  name: 'HelloWorld',
  data(){
    return {

      message:"测试",
      rawHtml:"<a href='http://www.itbaizhan.com'>百战</a>",
      dynamicId:10001,
      num:10,
      flag:true
    }
  }
}

结果:

 目的:与v-if组合成一个逻辑的要么这样要么那样

语法:v-else

 只能控制一个的显示的

v-show 

v-if与v-show的区别(前者是删除,后者是隐藏)

4、列表渲染

目的:把一个数组映射为一组元素

语法:v-for="item in items" (items指的是定义的数组名称,item为数组的每一个元素)

步骤:

 (1)创建一个数组(数组用方括号创建)

 newsList:[
          {
            id:1001,
            title:"今日新闻1"
          },
          {
            id:1002,
            title:"今日新闻2"
          },
          {
            id:1003,
            title:"今日新闻3"
          }
        ]

 (2)以ul加li标签的形式显示在页面上

报错:

 解决:在后面加 :key=“item.id”

(106条消息) Elements in iteration expect to have ‘v-bind:key‘ directives.‘_DaftJayee的博客-CSDN博客_v-bind:key' directives

<template>
  <div class="hello">
    <ul>
      <li v-for="item in newsList" :key="item.id">
        {{ item.title }}
      </li>
    </ul>
  </div>
</template>

结果 

 改成item.title

 上面bug的原因

说人话:Vue渲染机制是就地渲染每次只渲染新变化的部分,所以要有一个唯一的key供Vue识别排列所有的现有元素 

也可以以数组下标作为key,但是不推荐

5、事件处理

目的:监听DOM事件,并在触发事件时执行一些javascript

语法:v-on click="methodName"或者把v-on缩写成@

步骤:

(1)测试一个最简单的事件

<template>
  <div class="hello">
    <button v-on:click="counter +=1">点击:{{counter}}</button>
    //或者直接把v-on写成@
    <button @:click="counter +=1">点击:{{counter}}</button>
  </div>
</template>

<script>
  export default {
    name: 'HelloWorld',
    data(){
      return {
        // flag:true,
        counter:1
      }
    }
  }
</script>

结果:

每次点击都会counter都会+1 

(2)测试事件处理方法

引入methods方法模块

<el-button @:click="clickHandle">按钮3</el-button>
<script>
  export default {
    name: 'HelloWorld',
    data(){
      return {
        counter:1
      }
    },
    methods:{
      clickHandle(){
        console.log("哈哈哈")
      }
    }
  }
</script>

结果:

 更改标签中的文本

 methods:{
      clickHandle(){
        //在事件中,读取data中的属性,是需要通过this,属性
        this.message="消息被撤回了"
      }

结果:

----------->

引入event关键字

methods:{
      clickHandle(event){
        //在事件中,读取data中的属性,是需要通过this,属性
        this.message="消息被撤回了"
        //event是原生的DOM event
        console.log(event);
        //把按钮内的文字改一下
        event.target.innerHTML="点击之后"
      }
    }

传递参数:

<button @click="say('你好')"></button>
    methods:{
   
      say(data){
        console.log(data)
      }
    }

结果:

点击标签事件:

 <ul>
      <li @:click="clickItemHandle(item)" v-for="(item,index) in names" :key="index">
        {{item}}
      </li>
    </ul>
   methods:{
 
      clickItemHandle(item){
        console.log((item))
      }
    }

结果: 

 6、表单输入绑定

目的:用v-model指令在表单<input><textarea><select>元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素,负责监听用户的输入事件来更新数据,在某种极端场景下进行一些特殊处理。

语法:v-model=" " placeholder=" "或者把v-on缩写成@

步骤:

<template>
  <div class="hello">
   <input type="text" v-model="username">
    <p>{{username}}</p>
    <el-button @:click="clickUser">获取用户名</el-button>
  </div>
</template>
<script>
  export default {
    name: 'HelloWorld',
    data(){
      return {
       username:""
      }
    },
    methods:{
     
      clickUser(){
        console.log(this.username)
      }
    }
  }
</script>

结果:

实现边输入表单边实时获取

修饰符:

语法:在v-model后面添加

1、.lazy

目的:把输入实时获取,改成有change事件(回车,失去焦点)后才获取

2、.trim

目的:自动过滤用户输入的首尾空白字符,可以给v-model添加trim修饰符

7、组件基础

 其中:template标签部分必须存在

步骤:

(1)创建组件

(2)加载组件

 

 第三部的标签也可以用-隔开单词书写,结果相同

结果:

 小知识:

style标签里面添加scoped关键字,会让这个style里面对各种标签等的样式只在本组件内生效,否则会全局生效

 每个组件都可以引用其它组件,形成一个组件库,组件之间又独立运行,使得容错性提高

8、Props组件交互

目的:组件与组件之间需要存在交互,赋予组件存在的意义

语法:Props能决定组件与组件之间的一些数据的传递

步骤:

(1)在App.vue设置data并在里面编写传的数据内容

export default {
  name: 'App',
  components: {
    MyComponent
    // HelloWorld
  },
  data(){
    return{
      title:"我是一个标题"
    }
  }

}

(2)在MyComponent.vue建立props,并在内部定义被传输的数据

<template>
<!--<h3>prop传递数据</h3>-->
  <p>{{title}}</p>
</template>

export default {
  name: "MyComponent",
  props:{
    title:{
      type:String,
      default:"" //防止没有传输,给予默认值
    }
  }
}

(3)在标签里动态传输数据 ,传数据的个数无限制

结果: 

注意当要传输的数据为数组或者对象的时候,需要用函数的形式传

Mycomponent.vue

<template>
  <ul>
    <li v-for="(item,index) in names" :key="index">{{item}}</li>
  </ul>
</template>

<script>
export default {
  name: "MyComponent",
  props:{
    names:{
      type:Array,
      //数组和对象必须使用函数进行返回
      default: function (){
        return []
      }
    }
  }
}
</script>

App.vue

export default {
  name: 'App',
  components: {
    MyComponent
    // HelloWorld
  },
  data(){
    return{
      names:["星期1","星期2","星期3"]
    }
  }

}

结果:

9、自定义事件组件交互

自定义事件可以在组件中反向传递数据,prop可以将数据从父组件传递道子组件,那么反向如何操作呢,就可以利用自定义事件实现$emit   (比prop操作麻烦但是常用)

目的:反向传输数据(从子组件传给父组件)

语法://参数1:字符串:理论上是随便的,但是需要有意义
           //参数2:传递的数据
         this.$emit("onEvent",this.message)

步骤:

(1)编写Mycomponent里面要发送的数据内容、按钮点击发送的方法

<template>
  <h3>自定义事件传递数据</h3>
  <el-button @:click="sendMessage">发送给App组件数据</el-button>
</template>

<script>
export default {
  name: "MyComponent",
  data(){
    return{
      message:"我是Mycomponent数据"
    }
  },
  methods:{
    sendMessage(){
      //参数1:字符串:理论上是随便的,但是需要有意义
      //参数2:传递的数据
      this.$emit("onEvent",this.message)
    }

  }

(2)在App.vue编写标签Mycomponent,将之前在Mycomponent.vue里编写$emit括号里的字符串与在App.vue内编写的获取数据的方法用等号连接

 <my-component @onEvent="getMessage"/>
export default {
  name: 'App',
  components: {
    MyComponent
    // HelloWorld
  },
  data(){
    return{
    }
  },
  methods:{
    getMessage(data){
      console.log(data);
    }
  }

}
</script>

结果:

在自己定义的getMessage方法里可以随意的对数据进行操作,如把它赋值给当前组件的标签

<p>{{message}}</p>
  data(){
    return{
      message:""
    }
  },
  methods:{
    getMessage(data){
      this.message=data;
    }
  }

 结果:

Vue引入路由配置

目的:通过vue-router路由管理页面之间的关系(可以让单页面应用变得轻而易举)

语法:

步骤:

(1)安装路由 npm install --save vue-router

(2)配置独立的路由文件(其实可以设置自动创建,这里手动创建一遍)

创建router文件夹,创建index.js(编写路由配置的文件)

创建view文件夹:创建两个界面HomeView、AboutView

对index.js进行编写:先引入两个页面

import HomeView from "@/views/HomeView";
import AboutView from "@/views/AboutView";

编写页面的信息数组routes (component是小写,这里被坑了)

//配置信息中需要页面的相关配置

const routes = [
    {
        //访问路径设置
        path:"/",
        component:HomeView
    },
    {
        path:"/about",
        component: AboutView
    }
]

将数组填入创建的路由router中

const router = createRouter({
    history:createWebHashHistory(),
    routes
})

导出路由

export default router;

对App.vue进行编写

在template里添加路由的显示入口

<!--  //路由的显示入口-->
  <router-view></router-view>

添加页面点击的链接 (to里面是之前在routes数组里设置的页面配置路径)

  <router-link to="/">首页</router-link>
  <a> | </a>
   <router-link to="/about">关于</router-link>

对main.js进行编写(将路由导入主程序入口并使用)

添加以下两句

import router from "@/router";


app.use(router)

结果:(点击即可跳转页面)

特殊说明:推荐使用createWebHashHistory

 

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

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

相关文章

在 PyTorch 中使用梯度检查点在GPU 上训练更大的模型

作为机器学习从业者&#xff0c;我们经常会遇到这样的情况&#xff0c;想要训练一个比较大的模型&#xff0c;而 GPU 却因为内存不足而无法训练它。当我们在出于安全原因不允许在云计算的环境中工作时&#xff0c;这个问题经常会出现。在这样的环境中&#xff0c;我们无法足够快…

万向节锁问题

以前一直听说过万向节锁当时觉得问题太难就没去认真分析最近在B站找了一些视频看懂了。简单来说旋转是有顺序的&#xff0c;比如transform面板有三个旋转分量&#xff0c;你先调整y&#xff0c;再调整x&#xff0c;最后调整z按照正常思路来说&#xff0c;调整x轴是在y轴旋转的基…

想成为数据分析师,看这里,数据分析必备的43个Excel函数

目录 前言 函数分类&#xff1a; 关联匹配类清洗处理类逻辑运算类计算统计类时间序列类 前言 Excel是我们工作中经常使用的一种工具&#xff0c;对于数据分析来说&#xff0c;这也是处理数据最基础的工具。 很多传统行业的数据分析师甚至只要掌握Excel和SQL即可。 对于初学者…

【DataX】datax | datax-web | win搭建datax-web环境

一、环境准备 1、jdk8 2、maven 3、mysql7 4、python3 5、window10 6、idea 7、2345解压&#xff08;win支持tar.gz解压&#xff09; 8、git 二、操作步骤 1、datax操作步骤 1&#xff09;下载datax http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz 2&am…

ES6 环境下 Openlayers 集成使用 ol-ext 以及在线示例

ES6 环境下 Openlayers 集成使用 ol-ext 以及在线示例ol-ext 简介版本说明打包后体积集成方式在线示例最近打算重新封装一下 Openlayers&#xff0c;方便前端人员使用&#xff0c;基础功能没什么可说的&#xff0c;毕竟 Openlayers 的示例和 API 已经非常友好了。 想增加一些地…

2023-01-31 CSDN问答中如何防止和惩罚 “偷代码操作“

CSDN问答中如何防止和惩罚 "偷代码操作"前言一. 代码隐藏保护(CSDN官方回复目前无此功能)二. 先占位后抄袭的处理三. 编辑记录是照妖镜总结前言 随着问答的参与时间累积, 逐渐的碰到了一些问题, 常在河边走, 怎能不湿鞋, 原先看到抄代码结果原创没被采纳, 只能报以同…

AcWing 10. 有依赖的背包问题(分组背包问题 + 树形DP)

AcWing 10. 有依赖的背包问题&#xff08;分组背包问题 树形DP&#xff09;一、问题二、分析1、整体分析2、状态表示3、状态转移4、循环设计5、初末状态三、代码一、问题 二、分析 1、整体分析 这道题其实就是作者之前讲解过的一道题&#xff1a;AcWing 487. 金明的预算方案…

【双向链表】数据结构双向链表的实现

前言&#xff1a; 前一期我们已经学习过单链表了&#xff0c;今天我们来学习链表中的双向链表&#xff01; 目录1.概念以及结构2.双向链表结点结构体3.接口实现3.1动态申请一个结点3.2初始化链表3.3打印链表3.4双向链表尾插3.5 双向链表尾删3.6双向链表头插3.7双向链表头删3.8双…

Linux常用命令——pvscan命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) pvscan 扫描系统中所有硬盘的物理卷列表 补充说明 pvscan命令会扫描系统中连接的所有硬盘&#xff0c;列出找到的物理卷列表。使用pvscan命令的-n选项可以显示硬盘中的不属于任何卷组的物理卷&#xff0c;这些…

OAuth2代码演示

目录 1 创建项目结构 1.1 客户 1.2 认证服务器 1.3 资源拥有者 1.4 资源服务器 client 客户 authorization-server 认证服务 resource-owner 资源所有者 resource-server 资源服务器 工作流程&#xff1a; 客户向资源所有者申请授权码 资源所有者下发授权码 客户拿到授权…

springboot+mongodb初体验

MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写&#xff0c;旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 1、mongodb服务…

JavaScript 算术运算符

JavaScript 算术运算符 加减乘除以及取模&#xff08;求余数&#xff09;、、– <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" />…

代码随想录算法训练营第十六天 | 104.二叉树的最大深度、559.n叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数

Day15 周日休息一、参考资料二叉树的最大深度 &#xff08;优先掌握递归&#xff09;题目链接/文章讲解/视频讲解&#xff1a; https://programmercarl.com/0104.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6.html 二叉树的最小深度 &#xff08…

车载网络 - BootLoader - CAN/CANFD刷写前提

刷写作为车载网络测试极其重要的一个模块一直拖到今天才开始写,之前确实没有一个太好的想法怎么介绍这一块,虽然现在也没有想出来怎么写能够更好的介绍这块的内容,不过我也尽量用通俗的语言让大家看懂。 刷写流程 刷写流程我也根据用例的设计分为3个阶段:前置条件、刷写程序…

UDP+有穷自动状态机构造网络指令系统

UDP有穷自动状态机构造网络指令系统 项目背景 某展厅的小项目&#xff0c;使用Unity制作了一个视频播放器&#xff0c;作为受控端&#xff0c;需要接收解说员手中的“PAD”或“触控屏电脑”等设备发来的控制指令。要求指令系统满足以下功能&#xff1a; 能够随意切换要播放的…

剑指Offer 第17天 Top K问题 优先级队列解决数据流中位数

目录 剑指 Offer 40. 最小的k个数 剑指 Offer 41. 数据流中的中位数 剑指 Offer 40. 最小的k个数 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入4、5、1、6、2、7、3、8这8个数字&#xff0c;则最小的4个数字是1、2、3、4。 示例 1&#xff1a; …

图像处理中的微分算子

摘要 微分算子在图像处理中的作用主要是用在图像的边缘检测&#xff0c;而图像边缘检测必须满足两个条件&#xff1a;一能有效的抑制噪声&#xff0c;二能必须尽量精确定位边缘位置。现在常用的微分算子主要有&#xff1a;Sobel算子&#xff0c;Robert算子&#xff0c;Prewitt…

【数据结构-JAVA】堆和优先级队列

前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队 列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;该中场景下&#xff0c;使用队列显然不合适&#xff0c;比如&…

Hugo博客教程(一)

秋风阁——北溪入江流&#xff1a;https://focus-wind.com/ 秋风阁——计算机视觉实验&#xff1a;边缘提取与特征检测 文章目录Hugo博客教程&#xff08;一&#xff09;博客静态博客静态博客的优缺点常见的静态博客HexoHugo动态博客动态博客的优缺点常见的动态博客WordPressTy…

sql进阶教程

sql进阶教程第一章、神奇的sql1.1 CASE 表达式将已有编号方式转换为新的方式并统计用一条 SQL 语句进行不同条件的统计用 CHECK 约束定义多个列的条件关系在 UPDATE 语句里进行条件分支表之间的数据匹配在 CASE 表达式中使用聚合函数本节要点1.2 自连接的用法面向集合语言SQL可…