vue3.x之isRef toRefs isRef readonly 公共数据配置 axios配置 路由配置

news/2024/5/18 0:55:43/文章来源:https://blog.csdn.net/chuxialia/article/details/126974632

isRef toRefs

toRef

参数: (源对象 , 源对象属性)

可以用来为源响应式对象上的某个 property 新创建一个 ref。然后,ref 可以被传递,它会保持对其源 property 的响应式连接。

也就是说源响应式对象(toRef的第一个参数) 上的某个 property 新创建一个 ref

<template><div><p>{{x}}</p><p>{{y}}</p><button @click="changeXY">changeXY</button><button @click="look">look</button></div>
</template><script setup>
import { isRef, reactive, ref, toRef } from "vue";
let obj = reactive({x:10,y:20})
let {x,y} = obj
x = toRef(obj,"x");
y = toRef(obj,"y");
function changeXY(){x.value = 15y.value++
}
function look(){console.log(x,obj.x,y,obj.y);
}
</script>

在这里插入图片描述

toRefs

将响应式对象转换为普通对象,其中结果对象的每个 property 都是指向原始对象相应 property 的 ref。

主要功能:当从组合式函数 (.js) 返回响应式对象时,用toRefs就可以在不丢失响应性的情况下对返回的对象进行解构/展开。

toRef 是转单个, toRefs全转

原理:toRefs 会将 reactive 生成的对象的根级属性全都用 ref 转成 ref 对象,然后解构出来的都是 ref 对象,从而不丢失响应式

<!-- 案例一  -->
<template><div><p>{{name}}</p><p>{{age}}</p><button @click="change">change</button><button @click="look1">look1</button></div>
</template><script setup>
import { isRef, reactive, ref, toRef, toRefs } from "vue";
let obj1 = reactive({name:"karen",age:20})
let {name,age} = toRefs(obj1);
function change(){name.value = "Ben"age.value = 50
}
function look1(){console.log(name.value,obj1.age);
}</script>

在这里插入图片描述

isRef

检查值是否为一个 ref 对象

<template><div><p>{{msg}}</p><button @click="fn">isRef</button></div>
</template><script setup>
import { isRef, ref } from "vue";let msg = ref(0)
let msg1 = 0
function fn(){console.log(isRef(msg));console.log(isRef(msg1));
}
</script>

在这里插入图片描述

readonly

readonly 是将通过ref 或reactive定义好的数据进行拷贝后变为仅可读的数据,不可进行修改,即无响应

如强制修改 浏览器控制台就会报警告

在这里插入图片描述

公共数据配置

因为 vue2.x 使用公共配置时一般绑定在原型上无论是否使用都在每一个组件的this链上,这样的设计不太好,所以 vue3.x 提供了专门公共数据配置的方式: globalProperties getCurrentInstance,拉力进行配置

import { createApp } from 'vue'
import App from './App.vue'
const app=createApp(App)app.config.globalProperties.$name = "karen"
app.config.globalProperties.age = "18"app.mount('#app')
<script setup>
import Box1 from "./Box1.vue";
import Box2 from "./Box2.vue";
import {getCurrentInstance} from 'vue'
let componentsData = getCurrentInstance()
console.log(componentsData, componentsData.proxy.$name, componentsData.proxy.age);
</script>
<template><div><Box1></Box1><Box2></Box2></div>
</template><style scoped lang="scss">
</style>
<script setup>
import { getCurrentInstance } from "vue";
let box1Data = getCurrentInstance();
</script><template><div><p>{{ box1Data.proxy.$name }}</p></div>
</template>
<script setup>
import { getCurrentInstance } from "vue";
let box2Data = getCurrentInstance();
</script><template><div><p>{{ box2Data.proxy.age }}</p></div>
</template>

在这里插入图片描述
除了这样配置公共数据,还可以用另一种方法进行配置

main.js

import { createApp } from 'vue'
import App from './App.vue'
const app=createApp(App)
import $name from './http/$name.js'
app.use($name);
import $axios from './http/$axios'
app.use($axios)
app.mount('#app')

Box1.vue 一样的使用方法

<script setup>
import {  getCurrentInstance, ref } from "vue";
let name = getCurrentInstance()
</script><template><div class="box2"><p>{{ info }}</p><p>{{ age }}</p><p>{{name.proxy.$name}}</p></div>
</template>
<style>
.box2 {background-color:lightcoral;
}
</style>

$name.js

function $name(app){app.config.globalProperties.$name="karen"
}export default $name;

结果是一样的

axios配置

将axios配置到公共数据里去,这样各个文件夹都可以直接访问

App.vue

<script setup>
import Box1 from "./components/Box1.vue"
</script><template><div><Box1></Box1></div>
</template><style scoped lang="scss"></style>

vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'export default defineConfig({plugins: [vue()],server:{proxy: {'/api': {target: 'http://127.0.0.1:7001', rewrite: (path) => path.replace(/^\/api/, '/'), changeOrigin: true              }}}
})

main.js

import { createApp } from 'vue'
import App from './App.vue'
import axios from "axios"
const app=createApp(App)axios.defaults.baseURL="http://127.0.0.1:5173/api"
app.config.globalProperties.$axios=axiosapp.mount('#app')

Box1.vue

<template><div><h1>box1</h1><p>{{title}}</p><p>{{habiit}}</p><p>{{info}}</p><p>{{age}}</p></div>
</template><script setup>import {onMounted,getCurrentInstance, ref} from "vue"let {proxy}=getCurrentInstance()let title = ref("")let habiit = ref("")let info = ref("")let age = ref("")onMounted(async ()=>{		let res=await proxy.$axios('/test')console.log(res)title.value = res.data.titlehabiit.value = res.data.habiitinfo.value = res.data.infoage.value = res.data.age})</script><style>
</style>

在这里插入图片描述

路由配置

使用思路跟之前差不多,只是语法略微有写变化

路由文件

import {createRouter,createWebHistory
} from 'vue-router'
const routes = [{path: '/',name: 'home',component: () => import('../views/Home.vue'),beforeEnter(to, from, next) {next()}},{path: '/car',name: 'car',component: () => import('../views/Car.vue'),children: [{path: '/car/son',name: 'son',component: () => import("../views/Son.vue")},{path: '/car/girl',name: 'girl',component: () => import("../views/Girl.vue")}]}
]
const router = createRouter({history: createWebHistory(),routes
})export default router
<template><div>car<button @click="fm">Home</button><button @click="son">Son</button><button @click="girl">girl</button><router-view></router-view></div>
</template><script setup>
import { useRouter } from "vue-router";
let router = useRouter();
let fm = () => {router.push({ path: "/", query: { name: "home" } });
};
let son = () => {router.push({ path: "/car/son"});
};
let girl = () => {router.push({ path: "/car/girl"});
};</script><style>
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【3D视觉】PointNet解析

您好&#xff0c;各位&#xff01;今天就基于3D点云数据的分类以及分割模型 : PointNet与PointNet做一个简单的解析&#xff0c;解析部分将结合论文与代码&#xff0c;加上一些我个人微不足道&#xff08;也不一定对&#xff09;的见解在里面。 在看PointNet与PointNet之前&am…

第三章实验

实例一print("今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问几何?\n") number = int(input("请输入您认为符合条件的数:")) if number%3 == 2 and number%5 == 3 and number%7 == 2:print(number,"符合条件:三三数之剩二,五五数…

GBase 8s是如何实现库中数据安全保障的

随着计算机网络的广泛应用&#xff0c;网上信息的开放性与共享性日益增强&#xff0c;但随之而来的是信息安全问 题愈发严重。数据库是这些数据信息存储的主要场所&#xff0c;因此确保数据库中存储以及存取信息的安 全是确保网络安全的首要问题。为此&#xff0c;需要在通用的…

Nginx在Linux下的安装

✨ Nginx在Linux下的安装安装pcre安装其他的依赖安装Nginx(把压缩包放到opt目录)&#x1f4c3;个人主页:不断前进的皮卡丘&#x1f31e;博客描述:梦想也许遥不可及&#xff0c;但重要的是追梦的过程&#xff0c;用博客记录自己的成长&#xff0c;记录自己一步一步向上攀登的印记…

软件测试 git和gitee集成Pycharm 基于Flask的Mock Server服务器

文章目录1 Git1.1 作用1.2 工具1.3 名称解释2 安装git和注册Gitee3 使用Git(1)clone克隆命令(2)初始化(3)查看文件状态(4)文件提交暂存区(5)提交到本地版本库(6)修改文件(7)查看日志(8)跳转到提交的时间截点4 git和gitee集成Pycharm4.1 在Pycharm安装git和连接gitee(1)新建项目…

交互与前端3 前端需求简单梳理

说明 技术的终点是前端 我是从模型/算法作为起点的,顺着工作的需要和自己的兴趣&#xff0c;慢慢的逐步走到了前端。我想现在也是时候把前端搞好了&#xff0c;前端有几个作用&#xff1a; 1 对外可以作为广告。技术最终还是要考虑变现的。2 与外部协同。有很多工作是需要外部…

关于穿越机FPV视频果冻效应的讨论

关于穿越机FPV视频果冻效应的讨论1. 名词定义2. 摄像原理2.1 快门分类2.2 卷帘拍摄3. 产生原因4. 解决方法4.1 振动出处4.2 软件方法(辅助作用)4.3 硬件方法(直接办法)5. F450试验机遇到的问题5.1 现象5.2 测试5.3 减震改善5.4 其他改善5.5 初步结论5.6 改进方向6. 总结7. 参考…

基于ssm的远程家庭健康监测管理系统设计与实现-计算机毕业设计源码+LW文档

开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;…

常用的荧光染料示踪剂 Me-tetrazine-ICG,甲基-四嗪-吲哚菁绿 有哪些特点?

甲基-四嗪-吲哚菁绿是一种荧光染料化合物&#xff0c;四嗪可通过TCO点击化学标记到其它大分子上。吲哚菁绿是生物学中常用的荧光染料示踪剂&#xff0c;波长更长。 西安凯新生物科技有限公司常规修饰性聚乙二醇常备现 货&#xff0c;非常规基团修饰性聚乙二醇&#xff08;PEG&a…

h5(1)

H5 一、canvas标签 canvas是绘图标签&#xff0c;可以使用该标签在网页上生成一块画布&#xff0c;然后就可以在这块画布中随意的绘图。 canvas标签基本使用&#xff1a; <canvas width"500" height"500" id"cvs"></canvas> //w…

AWS聚焦数字经济与可持续发展

2022年中国国际服务贸易交易会于9月5日圆满闭幕&#xff0c;AWS在此间展示了多项领先的云计算技术和行业解决方案。围绕着本届服贸会“服务合作促发展绿色创新迎未来”的主题&#xff0c;AWS也在此次论坛中诠释和传递着其在助力数字经济及企业可持续发展的价值愿景。 9月3日与…

springboot 上传文件/图片到本地文件夹,利用nginx可以采用地址打开该文件

springboot 上传文件/图片到本地文件夹&#xff0c;利用nginx可以采用地址打开该文件 步骤&#xff1a; 一、下载nginx 打开nginx.conf 文件&#xff0c;配置nginx 启动nginx在nginx.exe文件所在的文件夹路径上直接cmd&#xff0c;输入nginx.exe即可启动nginx 注意&#xff…

企业运营管理 | 如何用「内容」取胜营销战?

全媒体时代&#xff0c;舆论生态、媒体格局、传播方式日新月异&#xff0c;但「内容为王」始终是品牌营销增长的公认规则。 除了投放渠道多、内容更新频次快、跨地域运营等挑战&#xff0c;如何规模化地输出统一的、优质的内容&#xff0c;以此驱动品牌增长&#xff0c;成为品牌…

u盘部分文件无故消失该怎么办?

u盘属于移动存储设备&#xff0c;用于备份数据&#xff0c;方便携带。可以存放各种格式的数据、文档、音频、视频、图片&#xff0c;即插即用&#xff0c;随时拔下。这给了我们极大地便利。但是我们在使用u盘的时候偶尔会出现一些意外&#xff0c;比如u盘文件没删除却消失了&am…

数据分析案例-基于sklearn随机森林算法探究影响预期寿命的因素

目录 项目目标 导入数据 查看数据基本信息 数据预处理 数据可视化 特征工程 建模 项目目标 **探索影响预期寿命的因素** 世卫组织建立了一段时间内所有国家健康状况的数据集&#xff0c;其中包括预期寿命&#xff0c;成人死亡率等方面的统计数据。使用此数据集&#xff…

Panama-FFI实现原理与移植

移植FFI 在说明如何对FFI进行移植之前需要先说明FFI的实现原理。JEP424是外部函数访问+本地内存,但是实际上需要移植的内容只有外部函数访问,对于本地内存的操作并不需要修改。 从java中调用native方法叫做downcall,而从native方法中调用java方法叫做upcall,下面通过downca…

泰克示波器知识分享-波的类型

提到泰克示波器&#xff0c;相信大多数人都知道&#xff0c;那大家对示波器基础知识了解多少呢?今天安泰测试就给大家分享一波干活——波的类型介绍&#xff1a; 您可以把大多数波分成下面几类&#xff1a; 周期信号和非周期信号 重复的信号称为周期信号,一直变化的信号则称为…

基于Android studio有声听书系统 java音乐播放器系统

1&#xff1a;注册登录&#xff1a;未注册用户首先进行账号注册&#xff0c;注册成功后进行登录&#xff0c;已注册用户直接输入账号密码进行登录&#xff0c;登录成功后进入主页面。 2&#xff1a;主页面&#xff1a;通过左右滑动可以实现对推荐界面、订阅界面、历史界面的切换…

第三章流程控制语句

一、判断输入的是不是黄蓉所说的数 二、验证瑛姑给出的答案是否正确 三、输出玫瑰花语 四、判断是否为酒后驾车 五、助力瑛姑(1):while循环版解题法 六、助力瑛姑(2):for循环版解题法七、打印九九乘法表 八、助力瑛姑(3):for循环改进版解题法 九、逢七拍腿游戏 十…

基于ssm的网上招投标系统设计与实现-计算机毕业设计源码+LW文档

开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;…