计算属性与watch的区别,fetch与axios在vue中的异步请求,单文本组件使用,使用vite创建vue项目,组件的使用方法

news2025/1/19 16:17:40

7.计算属性

7-1计算属性-有缓存

模板中的表达式虽然很方便,但是只能做简单的逻辑操作,如果在模版中写太多的js逻辑,会使得模板过于臃肿,不利于维护,因此我们推荐使用计算属性来解决复杂的逻辑

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>
<body>
    <!-- 
        计算缓存:"全局-内存"
        基于依赖(属性值)的缓存,依赖(属性值)改变,就重新计算一遍
     -->
     <div id="box">
        {{sub()}}
        {{sub()}}
        {{sub()}}
        {{com}}
        {{com}}
        {{com}}
     </div>
     <script>
        var obj={
            data() {
                return {
                    myName:"yiling"
                }
            },
            methods: {
                sub(){
                    // 页面调用几次,就打印几次
                    console.log("方法");
                    return this.myName.slice(0,1).toUpperCase()+this.myName.slice(1).toLowerCase()
                }
            },
            computed:{
                com(){
                    // 只打印一次,因为有缓存,缓存在内存中,基于依赖(属性值)的缓存,依赖(属性值)改变,就重新计算一遍
                    console.log("计算属性");
                    return this.myName.slice(0,1).toUpperCase()+this.myName.slice(1).toLowerCase()
                }
            }
        }
        var app=Vue.createApp(obj).mount('#box')
     </script>
</body>
</html>

从上述代码可以看出,如果我们把相同的代码定义为方法和计算属性,结果是完全相同的,但是计算属性会依赖缓存,如果缓存没有变化,就不会重新计算

注意:

1.不能在getter中做异步请求或者更改DOM

2.避免直接修改计算属性值

7-2watch侦听

watch选项期望接收一个对象,其中键是需要侦听的响应式组件实例属性(列如.通过data或computed声明的属性)–值是响应的回调函数,该回调函数接收被侦听原的新值和旧值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>
<body>
    <!-- 
        watch:
            1.支持异步
            2.要监听哪个状态,就写一个同名的方法在watch中
        watch与计算属性
            1.watch不会立即执行(除非加上immediate:true),计算属性会立即执行
            2.watch监听一个状态,计算属性多个状态
            3.watch可以是同步+异步,计算属性同步
     -->
     <div id="box">
        <select v-model="obj.year">
            <option value="2023">2023</option>
            <option value="2022">2022</option>
            <option value="2021">2021</option>
        </select>

        <select v-model="obj.month">
            <option value="10">10</option>
            <option value="11">11</option>
            <option value="12">12</option>
        </select>
        <select v-model="obj.day">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>
     </div>
     <script>
        var obj={
            data() {
                return {
                  
                    obj:{
                    year:2023,
                    month:11,
                    day:1
                  }
                }
            },
            watch:{
                  //与状态的值保持一致
                obj:{
                  handler(val){
                    console.log(val);
                  },
                    //开启深度监听
                    deep:true,
                    //页面一加载,就执行一次
                    immediate:true
                }
                  //----------------方法2-----------------
            
               "obj.year":"asy",
               "obj.month":"asy",
               "obj.day":"asy",

            },
            }
          methods: {
                asy(val){
                    console.log(val);
                }
            },
        }
        var app=Vue.createApp(obj).mount('#box')
     </script>
</body>
</html>

8.数据请求

8-1 Fetch

XMLHttpRequest 是一个设计粗糙的 API,配置和调用方式非常混乱, 而且基于事件的异步模型写起来不友好。

兼容性不好 polyfill: https://github.com/camsong/fetch-ie8

fetch("http://localhost:3000/users")
            .then(res=>res.json())
            .then(res=>{
                console.log(res)
            })


fetch("http://localhost:3000/users",{
            method:"POST",
            headers:{
                "content-type":"application/json"
            },
            body:JSON.stringify({
                username:"linda",
                password:"123"
            })
        })
            .then(res=>res.json())
            .then(res=>{
                console.log(res)
            })

fetch("http://localhost:3000/users/5",{
            method:"PUT",
            headers:{
                "content-type":"application/json"
            },
            body:JSON.stringify({
                username:"linda",
                password:"456"
            })
        })
            .then(res=>res.json())
            .then(res=>{
                console.log(res)
            })

fetch("http://localhost:3000/users/5",{
            method:"DELETE"
        })
            .then(res=>res.json())
            .then(res=>{
                console.log(res)
            })
8-2 axios

Axios是一个基于promise 的 HTTP 库,可以用在浏览器和 node.js中。

https://www.npmjs.com/package/axios

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  1. get请求

    axios.get("http://localhost:3000/users",{
        params:{
            name:"linda"
        }
    }).then(res=>{
        console.log(res.data)
    })
    
  2. post请求

    axios.post("http://localhost:3000/users",{
        name:"linda",
        age:100
    }).then(res=>{
    	console.log(res.data)
    })
    
  3. put请求

    axios.put("http://localhost:3000/users/12",{
        name:"linda111",
        age:200
    }).then(res=>{
        console.log(res.data)
    })
    
  4. delete请求

    axios.delete("http://localhost:3000/users/11").then(res=>{
        console.log(res.data)
    })
    
  5. axios(config)配置

    axios({
        method: 'post',
        url: 'http://localhost:3000/users',
        data: {
            name: 'linda',
            age: 100
        }
    })
        .then(res => {
        console.log(res.data)
    }).catch(err=>{
        console.log(err)
    })
    

9.过滤器

vue3不支持过滤器,是vue2支持

在 2.x 中,开发者可以使用过滤器来处理通用文本格式。

<p>{{ accountBalance | currencyUSD }}</p>

filters: {
      currencyUSD(value) {
        return '$' + value
      }
}

三.vue3进阶

组件化开发的定义?

​ 扩展html元素,提高代码的复用

​ 组件化开发的优势?

​ 1.代码层次清晰, 便于维护

​ 2.封装性好,

​ 3.复用性高

​ 为了防止数据污染, 组件与组件是隔离的(父子,兄弟)互相都访问不到,在自己的组件定义方法那些

​ 当前cdn缺点:

​ 1.组件template没有高亮显示,没有代码提示

​ 2.css行内样式

​ 3.局部定义组件,套娃

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="box">
        <!-- 定义组件 -->
        <yiling-navbar></yiling-navbar>
        <yiling-navbar></yiling-navbar>
    </div>
    <script>
        /* 
            组件化开发的定义?
                扩展html元素,提高代码的复用
            组件化开发的优势?
                1.代码层次清晰, 便于维护
                2.封装性好,
                3.复用性高
           为了防止数据污染, 组件与组件是隔离的(父子,兄弟)互相都访问不到,在自己的组件定义方法那些
        
            当前cdn缺点:
                1.组件template没有高亮显示,没有代码提示
                2.css行内样式
                3.局部定义组件,套娃
           */
   
        var app=Vue.createApp()
        // app是注册全局组件()
        app.component("yiling-navbar",{
            // 组件行内写样式
            template:`
                <div style="backgroundColor:yellow">
                    <h2>我是navbar</h2>
                    <yiling-footer></yiling-footer>
                    <button @click="back()">按钮</button>
                    <button>按钮</button>
                </div>
            `,
            methods: {
                back(){
                    console.log(1);
                }
            },
            data() {
                return {
                    
                }
            },
            watch:{

            },
            // 局部注册组件,其他地方不能用
            components:{
                "yiling-footer":{
                    template:`
                        <div style="backgroundColor:red">
                            <h2>我是footer</h2>
                        </div>
                    `
                }
            }
        })

        app.mount('#box')
    </script>
</body>
</html>
1.单文件组件(SFC)

Vue 的单文件组件 (即 *.vue 文件,英文 Single-File Component,简称 SFC) 是一种特殊的文件格式,使我们能够将一个 Vue 组件的模板、逻辑与样式封装在单个文件中。下面是一个单文件组件的示例:

<script>
export default {
  data() {
    return {
      greeting: 'Hello World!'
    }
  }
}
</script>

<template>
  <p class="greeting">{{ greeting }}</p>
</template>

<style>
.greeting {
  color: red;
  font-weight: bold;
}
</style>

如你所见,Vue 的单文件组件是网页开发中 HTML、CSS 和 JavaScript 三种语言经典组合的自然延伸。

  • 使用熟悉的 HTML、CSS 和 JavaScript 语法编写模块化的组件
  • [让本来就强相关的关注点自然内聚]
  • 预编译模板,避免运行时的编译开销
  • [组件作用域的 CSS]
  • [在使用组合式 API 时语法更简单]
  • 通过交叉分析模板和逻辑代码能进行更多编译时优化
  • [更好的 IDE 支持],提供自动补全和对模板中表达式的类型检查
  • 开箱即用的模块热更新 (HMR) 支持
1-2 Vue-CLI创建项目 - 锅灶升级

Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供:

  • 通过 @vue/cli 实现的交互式的项目脚手架。

  • 通过 @vue/cli + @vue/cli-service-global 实现的零配置原型开发。

  • 一个运行时依赖 (

    @vue/cli-service
    

    ),该依赖:

    • 可升级;
    • 基于 webpack 构建,并带有合理的默认配置;
    • 可以通过项目内的配置文件进行配置;
    • 可以通过插件进行扩展。
  • 一个丰富的官方插件集合,集成了前端生态中最好的工具。

  • 一套完全图形化的创建和管理 Vue.js 项目的用户界面。

Vue CLI 致力于将 Vue 生态中的工具基础标准化。它确保了各种构建工具能够基于智能的默认配置即可平稳衔接,这样你可以专注在撰写应用上,而不必花好几天去纠结配置的问题。与此同时,它也为每个工具提供了调整配置的灵活性,无需 eject。

安装:

npm install -g @vue/cli
# OR
yarn global add @vue/cli

创建一个项目:

vue create my-project
# OR
vue ui
1-4 Vite 创建项目 - 官方推荐

Vite(法语意为 “快速的”,发音 /vit/,发音同 “veet”)是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成:

  • 一个开发服务器,它基于 原生 ES 模块 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR)。
  • 一套构建指令,它使用 Rollup 打包你的代码,并且它是预配置的,可输出用于生产环境的高度优化过的静态资源。

Vite 意在提供开箱即用的配置,同时它的 插件 API 和 JavaScript API 带来了高度的可扩展性,并有完整的类型支持。

创建项目

Vite 需要 Node.js 版本 14.18+,16+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。

使用 NPM:

$ npm create vite@latest
#创建完项目之后,需要把所有的依赖都安装一下
npm install

使用 Yarn:

$ yarn create vite

使用 PNPM:

$ pnpm create vite
1-5 启动流程&入口文件

在这里插入图片描述

1-6创建引入组件的步骤
  1. 在components文件下创建vue文件在这里插入图片描述

  2. 在App.vue文件中,引入组件在这里插入图片描述

  3. 在组件文件下进行编写相应代码,必须要有跟目录,在vue3中,可以有多个div,但是在vue2中,只能有一个div

    <template>
    	<div>
            
        </div>
    </template>
    
  4. 问题,引入json文件,找不到报错误

    在这里插入图片描述

    解决:把js文件下的json文件放到public下面,之前放在src下面,导致找不到这个json文件

  5. 对于后端返回的名字,不能直接获取,可以使用map方法(fetch的卖座案例)

     <div>{{roles(data)}}</div>
      roles(data){
                       console.log(data.actors);
                       return data.actors.map(item=>item.name).join("|");
                    }
    

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

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

相关文章

DP4306F—Sub-1G无线收发通信芯片

DP4306F是一款高性能低功耗的单片集成收发机&#xff0c;工作频率可覆盖200MHz~1000MHz&#xff0c;集成M0核MCU&#xff0c;支持230 / 408 / 433 / 470 / 868 / 915频段。该芯片集成了射频接收器、射频发射器、频 率综合器、GFSK调制器、GFSK解调器等功能模块。通过SPI接口可以…

spark性能调优 | 默认并行度

Spark Sql默认并行度 看官网&#xff0c;默认并行度200 https://spark.apache.org/docs/2.4.5/sql-performance-tuning.html#other-configuration-options 优化 在数仓中 task最好是cpu的两倍或者3倍(最好是倍数&#xff0c;不要使基数) 拓展 在本地 task需要自己设置&a…

LTE信令流程及业务流程

1、Attach过程 完成完成鉴权、身份验证、用户注册以外&#xff0c;包含默认承载的建立 1)在LTE网络中&#xff0c;PDN连接是默认承载的建立&#xff0c;它是在EPS承载中建立的&#xff0c;主要用于在UE和PDN之间传输数据。 2)在建立PDN连接时&#xff0c;会通过EPS隧道连接到PD…

算法笔记-第五章-素数

算法笔记-第五章-素数 素数判断打印素数表c代码c 代码 最大素数最小素数孪生素数 素数判断 //素数 #include <cstdio> #include <cmath>bool isPrime(int n) {if (n < 1) //已知一个素数判断&#xff1a;条件就是n是否能被2&#xff0c;&#xff0c;&#xff0…

ES聚合与分组查询取值参数含义(Java api版本)

一、说明 在项目中使用Elasticsearch的聚合与分组查询后,对于返回结果一脸懵逼,查阅各资料后,自己总结了一下参数取值的含义,不一定全面,只含常见参数 二、分组查询 2.1 参数解释 SearchResponse<Map> searchResponse null;try {searchResponse client.search(s ->…

CentOS中安装常用环境

一、CentOS安装 redis ①&#xff1a;更新yum sudo yum update②&#xff1a;安装 EPEL 存储库 Redis 通常位于 EPEL 存储库中。运行以下命令安装 EPEL 存储库 sudo yum install epel-release③&#xff1a;安装 Redis sudo yum install redis④&#xff1a;启动 Redis 服…

哪种猫罐头比较好?推荐给新手养猫的5款好口碑猫罐头!

新手养猫很容易陷入疯狂购买的模式&#xff0c;但有些品牌真的不能乱买&#xff01;现在的大环境不太好&#xff0c;我们需要学会控制自己的消费欲望&#xff0c;把钱花在刀刃上&#xff01;哪种猫罐头比较好&#xff1f;现在宠物市场真的很内卷&#xff0c;很多品牌都在比拼产…

SOLIDWORKS功能布局实用技巧之保存实体技术

在SOLIDWORKS软件中&#xff0c;有一些命令可以将一个或多个实体保存为独立的零件文件。然而&#xff0c;每个命令都具有不同的特性&#xff0c;有些命令的选项可以让您在保存多个零件时直接生成装配体文件。让我们来深入了解这些功能布局技巧&#xff0c;特别是实体保存技术。…

Moka人事:实现无代码开发的API连接,打通电商平台与用户运营系统

无代码开发的API连接&#xff1a;Moka人事的核心优势 Moka人事&#xff0c;是北京希瑞亚斯科技有限公司于2015年推出的一款数据驱动的智能化HR SaaS产品。这款产品的主要优势在于其无需进行API开发即可实现系统的连接和集成&#xff0c;这不仅大大提升了企业的工作效率&#x…

软件测试/测试开发丨掌握未来,引领人工智能测试新潮流!

点此领取人工智能课程 在数字化革命的浪潮中&#xff0c;人工智能软件成为企业创新和成功的关键推动力。为了在这个竞争激烈的市场中脱颖而出&#xff0c;精湛的人工智能软件测试技能变得至关重要。 ChatGPT应用实战&#xff1a; 学员将深入了解 ChatGPT 的实际应用&#xf…

【BIM入门实战】高程点无法放置的解决方法

文章目录 一、问题提出二、解决办法1. 检查模型图形样式2. 高程点可以放置的图元一、问题提出 在平面图中添加高程点时有时会遇到无法在楼板等平面构件上放置高程点,应如何设置才能使高程点正常放置? 如下图所示,楼板上无法放置高程点: 二、解决办法 1. 检查模型图形样式…

安防监控展示预约小程序的作用如何

监控在生活中的用途非常广泛&#xff0c;普遍应用于小区门户、商业大厦、产业基地、家庭、汽车等场景中&#xff0c;市场需求较大&#xff0c;同时随着科技发展&#xff0c;安防监控产品更新迭代也比较快&#xff0c;衍生出的经销店、安装技术工等产业近些年也比较火。 安防监…

C++初阶(十一)STL简介及string类初讲

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、什么是STL二、STL的版本三、STL的六大组件四、STL的重要性五、如何学习STL六、STL的缺陷七…

NewStarCTF2023 Week3 Reverse方向 题目STL WP

分析 代码不多&#xff0c;逻辑挺清楚的。 先用Z3解出V7&#xff1a; from z3 import *s Solver() v1, v2, v3, v4, v5, v6 BitVecs(v1 v2 v3 v4 v5 v6, 32) v7, v8, v9, v10, v11 BitVecs(v7 v8 v9 v10 v11, 32)s.add((v1 << 15) ^ v1 0x2882D802120E) s.add((v2 …

Vue工程化

目录 一、环境准备 npm 二、Vue整站使用 1、Vue项目创建和启动 区别 目录结构 启动 2、Vue开发流程 App.vue 快速入门 3、API风格 案例 细节注意 代码实现 测试 一、环境准备 介绍&#xff1a;create-vue是Vue官方提供的最新的脚手架工具&#xff0c;用于快速生…

工业除尘器笔记

工业除尘器用于对工业生产产生的有害气体和粉尘进行吸附。相关标准的制定最早可以追溯到1960年代以前。注意&#xff0c;本文的附录包含一起完整的工业除尘器事故的分析和定责过程。相关事故分析定责文档源头摘自上海市政府网站。 在产品设计行业和关联下游行业&#xff0c;在…

核心容器中bean的操作

bean配置 bean基础配置 bean别名配置 **注意事项&#xff1a;**获取bean无论是通过id还是name获取&#xff0c;如果无法获取到&#xff0c;将抛出异常NoSuchBeanDefinitionException&#xff08;NoSuchBeanDefinitionException&#xff1a;No bean named ‘bookServiceImpl’ …

15技术太卷我学APEX-curl请求apex的autoRest

0 curl概述 cURL无处不在。它几乎隐藏在所有设备中&#xff0c;例如汽车&#xff0c;蓝光播放器等。它通过互联网协议传输任意类型数据。 0.1 cURL是什么意思&#xff1f; cURL&#xff08;客户端URL&#xff09;是一个开放源代码的命令行工具&#xff0c;也是一个跨平台的库…

智慧工地AI视频管理平台源码

智慧工地是指以物联网、移动互联网技术为基础&#xff0c;充分应用人工智能等信息技术&#xff0c;通过AI赋能建筑行业&#xff0c;对住建项目内人员、车辆、安全、设备、材料等进行智能化管理&#xff0c;实现工地现场生产作业协调、智能处理和科学管理。智慧工地的核心是以一…

三子棋——C语言初阶

一.游戏思路&#xff1a; 设计菜单&#xff0c;选择开始游戏(1)还是退出游戏(0)&#xff08;若是输入数字不再输入范围内&#xff0c;则“选择错误”&#xff09;初始化棋盘打印棋盘&#xff08;步骤二和三不可调换位置&#xff09;玩家下棋&#xff08;坐标落子&#xff09;—…