vue3框架基本使用

news2024/11/15 23:42:41

一、安装包管理工具

vite和vue-cli一样,都是脚手架。

1.node版本

PS E:\vuecode\vite1> node -v
v18.12.1

2.安装yarn工具

2.1 yarn简单介绍

yarn是一个包管理工具,也是一个构建、打包工具
yarn需要借助npm进行安装:执行的命令行npm install -g yarn。
yarn的优点:
1.安装速度快:因为yarn缓存每一个下载过的包,所以再次使用时无需重复下载。同时利用并行下载以最大化资源利用率,因此安装速度更快。
2.安全性较高: 在执行代码之前,yarn会通过算法校验每个安装包的完整性。这个是npm所没有的
3.可靠性强: 使用详细,间接的锁文件格式和明确的安装算法,yarn能够保证在不同系统上无差异的工作

2.2 安装

E:\vuecode\vite1>npm install -g yarn
E:\vuecode\vite1>yarn -v
1.22.21

3.yarn基本使用

3.1 本地安装包

本地安装,本地安装就是安装包只在项目内生效

yarn add 包名
相当于
npm install 包名

3.2 全局安装

yarn global add 包名
相当于
npm -g install 包名

3.3 安装所有依赖

安装package.json里所有包

yarn install 

3.4 设置yarn镜像

yarn config set registry https://registry.npm.taobao.org

3.5 全局卸载包

yarn global remove 包

4.pnpm基本使用

pnpm是npm和yarn的新一代替代工具,vite的官网也建议使用pnpm来安装vite

4.1 安装pnpm

使用npm的前提是 node的版本需要大于12版本

npm -g install pnpm

二、创建vite项目

注意:这里的create vite中的vite不是项目名称,而是创建vite项目

pnpm create vite

1.创建过程的参数

在这里插入图片描述

2.选择原生JS语言

如果会使用TS,那么就选择TS

在这里插入图片描述

3.启动项目

cd 项目中

#安装所有依赖
pnpm install

#启动项目
pnpm run dev

4.基础介绍

单个 ue文件分为3部分

<template>
  编写html
</template>

<script>
 编写JS
</script>
<style>
 编写CSS
</style>

5.setup函数和return

<script>
export default {
  name: "App",
  setup(){
    // js所有的函数和变量全部写在这个setup函数中

	// 如果在template中使用这里定义的数据或者函数,必须使用return 返回回去才可以使用
	retunr {xxxxxx}
  }
}
</script>

简单实例

<template>
  <div>
    <h1>{{ name }}</h1>
    <button @click="test">按钮</button>
  </div>
</template>

<script lang="ts">
export default {
  name: "App",
  setup(){
    const name = "zhangsan"
    function test() {
      alert("vue test")
    }

    return { name,test }
  }
}
</script>

<style>

</style>

6.setup语法糖

上边说过了 setup中必须要有return返回数据,模板中才能用,如果有大量的数据,每一个都要返回,这样很繁琐,也很容易遗漏,所有有了语法糖。语法如下

<template>
  <div>
    <h1>{{ name }}</h1>
    <button @click="test">按钮</button>
  </div>
</template>

<script lang="ts">
export default {
  name: "App"
}
</script>

<!-- 这里在增加一段script 标签,里边标明是setup -->
<script lang="ts" setup>
  let name = "zhangsan"

  function test(){
    alert("vue test")
  }

</script>
<style>

</style>

注意:两端script的lang的值必须一致,否则报错。

7.标签的ref

注意:这里的ref和vue3中的 "响应式"ref函数不是一回事。
ref和id一样都是为了定义html元素,为了DOM操作。但是范围不一样。id是整个项目生效,ref是组件内生效。

<template>
  <div>
    <h1 ref="box">hello</h1>
    <button @click="getbox">点我获取元素</button>
  </div>
</template>

<script lang="ts">
export default {
  name: "App"
}
</script>

<script lang="ts" setup>
import { ref } from 'vue'
  // 这里必须创建一个和ref值相同饿变量,来接收box标记的于元素
  const box = ref()
  function getbox(){
    console.log(box.value)
  }
</script>
<style>

</style>

三、vue路由

1.vue项目文件关系图

其实在前边的博客文档中已经详解讲过了,这里在写一下

用户访问入口: index.html
vue项目初始化入口: main.js
根组件/路由: App.vue
子组件1
子组件2
子组件3
子组件4

目录结构

1.node_modules: 模块安装目录,下载安装的第三方模块会存放在这里
2.public: 公共资源目录
3.src: 主要存放代码的目录
	-- assets     静态资源目录
	-- components 公共组件目录
	-- router     路由目录   		 #自定义创建目录
	-- store      状态管理目录(vuex)  #自定义创建目录
	-- views      页面组件目录  		#自定义创建目录
	-- App.vue    "根"组件文件		
	-- main.js    项目入口文件

4.index.html     用户访问入口文件

2.vue路由

2.1 安装vue-router

这里选择的是局部安装。包不是全局的,只是安装在了这个项目当中

E:\vuecode\vite_project1>pnpm install vue-router

查看vue-router安装版本,或者查看packages.json文件。

E:\vuecode\vite_project1>pnpm ls |findstr /i router
vue-router 4.2.5

2.2 建立路由文件

在src/下创建 router目录,然后创建index.js。内容如下

import { createRouter,createWebHashHistory } from 'vue-router'

const routes = [
    // 在这里设置路由,这里暂时没有写路由,只是先把格式写在这里
]

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

export default router


2.3 在main.js中引入路由文件

import { createApp } from 'vue'
import App from './App.vue'

//这里引入了刚才创建的js文件,因为文件名称是index.js,所有只写目录名称即可,如果js文件不是index 则需要把文件名写全
import router from './router'

//这里做了调整,默认格式并不是这样,修改的目的是为了引入UI组件的时候更好操作
const app = createApp(App).use(router)



app.mount('#app')

2.4 路由出口

在传统的html中,会有很多的html文件,通过"“标签在多个html文件中进行调整,这个跳转是静态文件级别之间的跳转。
而在vue框架中并不是这样的,vue是单文件组件开发,所有的链接跳转,不是发生在多个静态html文件之间的跳转。从上边的的项目关系图中也能看出,用户访问的始终是index.html这一个静态文件。所有的跳转都是发生在了index.html这一个文件当中。那么vue是怎么在一个文件中发生的路由跳转呢?
这就是要说的vue的"路由出口” 。

路由出口的本质就是: 显示子组件的地方

<router-view></router-view>

如下图:
在这里插入图片描述

3.路由简单实例

这里以一个小实例来验证上边的示意图
创建src/views文件夹,创建组件Home.vue和Login.vue

3.1 Home.vue内容

<template>
    <div>
        <h3>Home.vue文件</h3>
    </div>
</template>
<script>
export default {
    
}
</script>
<style lang="css">
    
</style>

3.2 Login.vue

<template>
    <div>
        <h3>Home.vue文件</h3>
    </div>
</template>
<script>
export default {
    
}
</script>
<style lang="css">
    
</style>

3.3 配置路由出口

编辑App.vue文件,增加子组件的的路由出口(也就是在哪里显示)

<script>
export default {
  
}
</script>

<template>
        <!-- 这里增加一行内容,是为了说明多个组件是在app.vue文件内进行路由跳转 -->
        <h1>App.vue文件</h1>
        <!-- 增加路由出口 -->
        <router-view></router-view>
    
</template>

<style lang="css">
  
</style>

3.4 建立路由规则

编辑main.js文件,并编写路由规则

import { createRouter,createWebHashHistory } from 'vue-router'
//引入两个自定义组件
import Login from "../views/Login.vue"
import Home from "../views/Home.vue"

const routes = [
    // 路由规则
    { path: "/",redirect: "/login" },
    { path: "/login",component: Login },
    { path: "/home",component: Home },
]

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

export default router

3.5 main.js引入路由文件

import { createApp } from 'vue'
import App from './App.vue'
// 引入路由文件
import router from './router'

// 使用路由文件
const app = createApp(App).use(router)

app.mount('#app')

3.6 验证

在浏览器分别访问/home和/login ,发现结果如下

App.vue文件
Home.vue文件
和
App.vue文件
Login.vue文件

路由切换过程中,App.vue文件内容没有变,Home和Login组件内容在App.vue不断变化,这说明子组件都是在App.vue的路由出口中来回切换。

4.路由嵌套(子路由)

组件关系图如下:

App.vue 路由出口
Home.vue 路由出口
Login.vue
Host.vue
Cart.vue

在views目录下创建Home_clidren目录,存放Home.vue组件的子组件

4.1 设置Home子组件Cart.vue

<template>
    <div>
        <h5>cart.vue文件</h5>
    </div>
</template>
<script>
export default {
    
}
</script>
<style>

</style>

4.2 设置Home子组件Host.vue

<template>
    <div>
        <h5>host.vue文件</h5>
    </div>
</template>
<script>
export default {
    
}
</script>
<style>

</style>

4.3 设置Home子组件的路由出口

在Home.vue中添加Home组件的子组件路由出口

<script>
export default {
    
}
</script>


<template>
        <h3>Home.vue文件</h3>
        <router-view></router-view>
</template>

<style lang="css">
    
</style>

4.4 设置Home组件子路由

编辑index.js

import { createRouter,createWebHashHistory } from 'vue-router'
//引入两个自定义组件
import Login from "../views/Login.vue"
import Home from "../views/Home.vue"
import Host from "../views/Home_children/Host.vue"
import Cart from "../views/Home_children/cart.vue"

const routes = [
    // 编写路由规则
    { path: "/",redirect: "/login" },
    { path: "/login",component: Login },
    { path: "/home",component: Home,
    	// home组件的子路由
        children: [
            { path: "host",component: Host},
            { path: "cart",component: Cart},
        ]
    },
]

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

export default router

4.5 验证

在浏览器访问/home/host和/home/cart 可以看到

Home.vue文件
host.vue文件
和
Home.vue文件
cart.vue文件

5.router-link

上边的基本路由和路由嵌套都是 需要在浏览器中手动输入路由地址才能切换。这样就项目中肯定是不行的。
项目中肯定是 点击 某个图标或者链接就可以跳转路由。这时候就用到了router-link

5.1 设置组件

Map.vue组件

<template>
    <div>
        <h1>我是地图首页</h1>
    </div>
</template>

<script>
export default {
    name: "Map"
}
</script>
<style>
   div {
    width: 100%;
   }
</style>

Music.vue组件

<template>
    <div>
        <h1>我是音乐主页</h1>
    </div>
</template>
<script lang="ts">
export default {
    name: "Music"
}
</script>
<style>
   div {
     width: 100%;
   }
</style>

News.vue组件

<template>
    <div>
        <h1>我是新闻主页</h1>
    </div>
</template>
<script>
export default {
    name: "News"
}
</script>
<style>
    div {
        width: 100%;
    }
</style>

5.2 设置路由

router/index.js

import { createRouter,createWebHashHistory } from 'vue-router'
//引入两个自定义组件
import Map from '../views/Map.vue'
import Music from '../views/Music.vue'
import News from '../views/News.vue'


const routes = [
    // 编写路由规则
   { path : "/music",component: Music },
   { path : "/map",component: Map },
   { path : "/News",component: News },

]

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

export default router

5.3 设置路由出口

App.vue

<script>
export default {
        name: "App"
}
</script>

<template>
<div>
        <div class="header">
        		<!-- router-link中的to就是要跳转的路由url -->
                <span><router-link to="/news">新闻</router-link></span> 
                <span><router-link to="/map">地图</router-link></span>
                <span><router-link to="/music">音乐</router-link></span>
        </div>
        <div class="outer">
           <router-view></router-view>       
        </div>
            
</div>
</template>

<style lang="css">
        .header {
                width: 50%;
                height: 100px;
                background: gainsboro;
                margin: 0 auto;
                display: flex;
                justify-content: space-between;
                border-radius: 3px;
        }
        .header span {
                height: 50px;
                width: 80px;
                background: #ddd;
                text-align: center;
                line-height: 50px;
                margin: auto;
                font-size: 20px;
        }
        .router-link-active {
                color: white;

        }
        .outer{
                display: flex;
                width: 50%;
                height: 500px;
                background: #2b4b6b;
                margin: 0 auto;
                margin-top: 100px;
                border-radius: 5px;
                line-height: 500px;
                text-align: center;
        }
</style>

5.4 验证

点击相应的链接就会显示对应的路由页面

6.路由工作模式

VUE有两种工作模式:

history模式: url种不带#号 ,比较美观,但是需要在nginx 使用try_file 参数来处理路径。一般适用于业务。
用法:编辑router/index.js

import { createRouter,createWebHistory } from 'vue-router'

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

hash模式:url中带#, 兼容性好,适用于后台管理系统.

import { createRouter,createWebHashHistory } from 'vue-router'

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

7.to的两种写法

这种是根据路由的路径跳转
<span><router-link :to="{path: '/news'}">新闻</router-link></span>

这种是根据路由的名字跳转
<span><router-link :to="{name: 'map'}">地图</router-link></span>

8.编程式路由

编程式路由时路由要比router-link使用的频率还要高,比如:用户登录的时候成功的时候,就会自动跳转到管理页面,这时候用的就是编程式路由
语法非常简单

<template>
<div>
    <button @click="test">新闻</button>    
</div>
</template>

<script setup>
import { useRouter } from 'vue-router'
        const router = useRouter()

        function test(){
                router.push('/news')
        }

</script>

9.路由守卫

9.1 全局前置守卫

每次发生路由的导航跳转时,都会触发全局前置守卫。
语法如下:编辑router/index.js

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

只要增加上这个路由守卫,即使,函数中什么都不写,所有的路由都不能访问。相当于默认策略是拒绝。
router.beforeEach((to,from,next)=>{
    
})

9.2.参数解释

to: 要跳转到哪里
from: 从哪里跳转过来的
next函数: ,默认是放行,参数还可以传递指定的路由url

9.3 实例

router.beforeEach((to,from,next) => {
 	#如果访问是login页面直放行。
    if(to.path === '/login')  next()
    #获取token
    const tokenstr = window.sessionStorage.getItem('token')
    
    #根据结果判定是否放行
    if (!tokenstr){
        next('/login')
    }else{
        next()
    }
})

四、vuex

1.作用

1.专门为vue.js设计的状态(数据)管理库
2.采用集中式的方式存储需要的共享的状态
3.vuex的作用是进行状态管理,解决复杂的组件通信,数据共享问题

2.安装vuex

pnpm install vuex 

查看安装后的版本
E:\vuecode\vite_project1>pnpm list |findstr /i vuex
vuex 4.1.0

3.基本结构

在src/store/index.js 就是vuex的文件

import { createStore } from 'vuex'

export default createStore({
  //数据仓库,所有的数据都定义在state当中
  state: {
  },
  //类似于组件中的计算属性,监视state中的数据,一旦数据发生变化就开始运行
  getters: {
  },
  //同步调用
  mutations: {
  },
  //异步调用
  actions: {
  },
  modules: {
  }
})

main.js中引入vuex

import store from './store'

//使用vuex,这里注意导入的时候 必须叫store,否则使用不了
const app = createApp(App).use(router).use(store)

4.state的基本使用

import { createStore } from 'vuex'

export default createStore({
  state: {
    //定义一个变量
    username: "zhangsan"
  }
})

4.1 template中调用

<template>
  <div>
  	  <!-- 直接使用$store.state来调用vuex中的数据 -->
      hello: {{ $store.state.username }}
  </div>
</template>

4.2 在script中调用

<script>
// 导入useStore函数
import { useStore } from 'vuex'
export default {
  setup(){
    //通过useStore返回值来调用state中的数值
    const store = useStore()
    console.log(store.state.username)

  }
}
</script>

5.getters的基本使用

在getters中定义函数

import { createStore } from 'vuex'

export default createStore({
  state: {
    //定义一个基本数据
    username: "zhangsan"
  },
  getters: {
    //对username数据进行二次处理,每一个处理函数都需要将state作为参数传递过来
    newusername(state){
      return state.username + "您好"
    }
  }
})

5.1 在template中使用

<template>
    <div>
        <h1>我是登录页面</h1>
        <h1>{{ $store.state.username }}</h1>
        <h1>{{ $store.getters.newusername }}</h1>

        <button @click="test">登录</button>
    </div>
</template>

5.2 在script中使用

<script>
// 导入useStore函数
import { useStore } from 'vuex'
export default {
  setup(){
    const store = useStore()
    console.log(store.getters.newusername)

  }
}
</script>

五、ant design UI组件库

这里介绍ant design组件是因为它还支持JS代码,而element-plush全部是TS代码,增加学习成本,所有就不考虑了。
所以这里使用 ant-design-vue
安装 “ant design” UI组件库,官网如下:

https://www.antdv.com/docs/vue/getting-started-cn

1.安装ant

$ pnpm install ant-design-vue 

查看版本

E:\vuecode\vite_project1>pnpm ls |findstr /i ant
ant-design-vue 4.1.0

2.引入ant

在main.js中引入ant

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import ant from 'ant-design-vue'

const app = createApp(App).use(router)
app.use(ant)

app.mount('#app')

3.引入ant组件

官网链接:

https://www.antdv.com/components/button-cn

代码如下:

<template>
    <a-button type="primary" size="small">登录</a-button>    
</template>

4.ant的icon图标

pnpm install @ant-design/icons-vue

#指定淘宝源
pnpm install @ant-design/icons-vue --registry https://registry.npm.taobao.org

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

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

相关文章

React一学就会(3): 强化练习一

前言 兄弟们点个关注点点赞&#xff0c;有什么建议在评论里留言说一下&#xff0c;一定要和我多多互动啊&#xff0c;这样我才有动力创作出更有品质的文章。 这节课我们用前两节课的知识做一个实践&#xff0c;在实战中巩固我们所学。本来我想借用官方的示例翻译一下&#xf…

认识思维之熵

经常有读者问我&#xff0c;说&#xff1a; 为什么向您请教一个问题&#xff0c;您总能很快指出在哪篇文章里面提到过&#xff0c;是因为您的记忆力特别好吗&#xff1f; 其实不是的。更重要的原因是&#xff1a;如果你经过系统训练&#xff0c;有意识地去获取知识的话&#x…

JVM篇----第九篇

系列文章目录 文章目录 系列文章目录前言一、分代收集算法二、新生代与复制算法三、老年代与标记复制算法前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、分代…

PageHelper学习使用

基于mybatis源码和PageHelper源码进行的测试 版本 mybatis3.5.0&#xff0c;pageHelper6.0.0 测试用例 依赖 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version> &…

权威媒体报道 | 百分点科技谈“数据要素×”

近日&#xff0c;国家数据局等17部门联合印发《“数据要素”三年行动计划&#xff08;2024—2026年&#xff09;》&#xff0c;引起广泛关注&#xff0c;作为数据要素技术厂商代表&#xff0c;百分点科技CTO刘译璟接受经济日报、中国高新技术产业导报采访&#xff0c;结合产业现…

pysot中eval多种算法比较和画图

安装miktex和Texwork&#xff0c;记得更新miktex&#xff0c;链接https://miktex.org/download&#xff0c; 参考https://blog.csdn.net/weixin_42495721/article/details/110855071 我用的是pysot官方的库&#xff0c;里面包括eval和test、train等py文件。 路径结构为&#x…

【C++修行之道】STL(初识list、stack)

目录 一、list 1.1list的定义和结构 以下是一个示例&#xff0c;展示如何使用list容器: 1.2list的常用函数 1.3list代码示例 二、stack 2.1stack的定义和结构 stack的常用定义 2.2常用函数 2.3stack代码示例 一、list 1.1list的定义和结构 list的使用频率不高&#…

【JAVA】什么是自旋

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 结语 我的其他博客 前言 在计算机科学的领域中&#xff0c;多线程和并发编程已成为处理复杂任务和提高系统性能的不可或缺的手段。…

行测-言语:3.逻辑填空

行测-言语&#xff1a;3.逻辑填空&#xff08;刷题积累&#xff0c;国考省考&#xff09; 1. 词的辨析 1.1 词义侧重 C&#xff0c;心酸&#xff1a;内心难过&#xff1b;辛酸&#xff1a;辛苦&#xff1b;刻画&#xff1a;雕刻和绘画&#xff1b;塑造&#xff1b;描绘&#x…

MC3172 初探

感芯科技第一款32位 RISC处理器MC3172&#xff0c;业内首个64线程同步并行运行&#xff0c;线程资源可按需配置&#xff0c; 共享代码段空间与数据段空间&#xff0c;硬件级实时响应&#xff0c;无需中断服务程序&#xff0c;无需实时操作系统。 基于RISC-V RV32IMC 指令集&…

STM32实现软件IIC协议操作OLED显示屏(2)

时间记录&#xff1a;2024/1/27 一、OLED相关介绍 &#xff08;1&#xff09;显示分辨率128*64点阵 &#xff08;2&#xff09;IIC作为从机的地址0x78 &#xff08;3&#xff09;操作步骤&#xff1a;主机先发送IIC起始信号S&#xff0c;然后发送OLED的地址0x78&#xff0c;然…

java servlet运输公司管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web运输公司管理系统是一套完善的java web信息管理系统 serlvetdaobean mvc 模式开发 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5…

Linux服务器配置与管理(第二次实验)

实验目的及具体要求 目的 1.掌握基于命令行的文件操作 2.掌握基于命令行的目录操作 3.掌握用户账户的命令行操作 4.掌握组账户的命令行操作 5.熟悉磁盘分区操作 6.掌握调整优先级的方法 具体要求 1.掌握基于命令行的文件和目录操作 ①创建测试目录 ②创建文件 ③复…

3DGS 其二:Street Gaussians for Modeling Dynamic Urban Scenes

3DGS 其二&#xff1a;Street Gaussians for Modeling Dynamic Urban Scenes 1. 背景介绍1.1 静态场景建模1.2 动态场景建模 2. 算法2.1 背景模型2.2 目标模型 3. 训练3.1 跟踪优化 4. 下游任务 Reference&#xff1a; Street Gaussians for Modeling Dynamic Urban Scenes 1.…

JavaGUI之SWT框架【Button】

文章目录 1. 按钮类型1.1 普通按钮1.2 单选按钮1.3 多选按钮 2. 文字风格3. 按钮外观风格 录制的视频 按钮Button&#xff0c;SWT框架中常见的组件。针对Button的设置分为三个层面&#xff0c;分别是按钮类型&#xff0c;按钮文字对齐风格&#xff0c;按钮外观风格 1. 按钮类型…

SpringBoot将第三方的jar中的bean对象自动注入到ioc容器中

新建一个模块&#xff0c;做自动配置 config&#xff1a;需要准备两个类&#xff0c;一个自动配置类&#xff0c;一个配置类 CommonAutoConfig&#xff1a;此类用于做自动配置类它会去读取resoutces下的META-INF.spring下的org.springframework.boot.autoconfigure.AutoConfig…

NoSQL基本内容

第一章 NoSQL 1.1 什么是NoSQL NoSQL&#xff08;Not Only SQL&#xff09;即不仅仅是SQL&#xff0c;泛指非关系型的数据库&#xff0c;它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起&#xff0c;非关系型的数据库现在成了一个极其热门的新领域&#xff0c;…

苹果macOS 恶意软件家族被曝光:通过破解软件分发,可窃取敏感信息

卡巴斯基安全实验室近日发布博文&#xff0c;发现了一种针对苹果 macOS 设备的新型恶意软件家族&#xff0c;并提醒苹果 Mac 用户谨慎下载破解软件。 报告称这种新型恶意软件家族高度复杂&#xff0c;主要伪装成为各种知名 macOS 软件的破解版分发&#xff0c;用户下载恶意 PKG…

InitVerse:为云计算服务带来更高的透明度和可验证性

InitVerse&#xff1a;为云计算服务带来更高的透明度和可验证性 在云计算服务领域&#xff0c;透明度和可验证性是构建信任的关键要素。传统的云计算市场往往缺乏透明度&#xff0c;用户难以了解其数据和计算资源的实际使用情况。然而&#xff0c;通过利用区块链技术&#xff0…

2024.1.27 GNSS 学习笔记

1.精确的描述轨道的一组数据(星历)是实现精确定位与导航的基础。 2.GNSS卫星广播星历的提供方式一般有两种&#xff1a;一种是提供开普勒轨道参数和必要的轨道摄动改正项参数&#xff0c;如GPS、BDS、Galileo三大系统采用此种模式&#xff0c;还有QZSS系统&#xff1b;另一种是…