vue.js入门

news2024/12/23 6:16:31

目录

一. 框架概述

二. vue常用命令

2.1 插值表达式

2.2 v-text

2.3 v-html

2.4 v-on

2.5 v-model 

2.6 v-show

 2.7 v-if

2.8 v-else

2.9 v-bind

2.10 v-for

三. vue生命周期函数


一. 框架概述

我们之前写的javaScript代码都是原生的,而框架是在基础语言之上,对其进行了封装,使我们只关心要操作的数据,而不关心如何从对象上得到数据,方便程序员进行开发,提高效率的,我们要介绍的vue.js就是前端的一种框架,它是对javaScript的一种封装

二. vue常用命令

2.1 插值表达式

写法:{{vue中的数据}}

作用:可以根据括号里vue中的数据获取到对应的值,只要vue中与它对应的数据发生改变,插值表达式中的值也会发生改变,一般用于设置文本内容,不影响标签中原本的值,但不能解析内容中的html标签

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<!-- 导入vue.js -->
		<script src="js/v2.6.10/vue.min.js"></script>
	</head>
	<body>
		
		{{message}} 插入一个值,不影响标签中的其他内容
		
		{{message}}不能解析内容中html标签
		-->
		<div id="app">
			<p>{{message}} aaaaa</p>
		</div>
		
		<script>
			/*
			 创建一个vue对象
			 */
			var app = new Vue({
				el: '#app',
				data:{
					message: '<b>Hello Vue!</b>'
				}
			})
		</script>
	</body>
</html>

2.2 v-text

作用:设置标签中的文本内容,默认格式会覆盖标签中原本的内容,用插值表达式不会覆盖标签中原本的内容,不能解析内容中的html标签

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<!-- 导入vue.js -->
		<script src="js/v2.6.10/vue.min.js"></script>
	</head>
	<body>
		<--

		{{message}} 插入一个值,不影响标签中的其他内容
		v-text="message" 会覆盖标签中其他内容
		
		-->
		<div id="app">
			<p>{{message}} aaaaa</p>
			<p v-text="message">aaaaa</p>
		</div>
		
		<script>
			/*
			 创建一个vue对象
			 */
			var app = new Vue({
				el: '#app',
				data:{
					message: '<b>Hello Vue!</b>'
				}
			})
		</script>
	</body>
</html>

2.3 v-html

作用:设置元素的innerHTML,可以解析内容中的标签,会覆盖标签中原本的内容

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<!-- 导入vue.js -->
		<script src="js/v2.6.10/vue.min.js"></script>
	</head>
	<body>
		<!--
		v-html="message"会覆盖标签中其他内容
		
		v-html="message" 可以解析内容中html标签
		-->
		<div id="app">
			<p v-html="message">aaa</p>
		</div>
		
		<script>
			/*
			 创建一个vue对象
			 */
			var app = new Vue({
				el: '#app',
				data:{
					message: '<b>Hello Vue!</b>'
				}
			})
		</script>
	</body>
</html>

三者的区别: 

  1. 插值表达式不会覆盖标签中原本的内容,v-text和v-HTML会覆盖标签中原本的内容
  2. v-HTML能解析内容中的标签,插值表达式和v-text不能解析

2.4 v-on

作用:为标签绑定事件

有两种写法

  1. 在标签后面写v-on:事件类型="调用的函数"
  2. @事件类型="调用的函数"

调用的函数定义在Vue对象的methods属性中,也可以传参

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!--导入vue.js-->
		<script src="js/v2.6.10/vue.min.js"></script>
	</head>
	<body>
		<div id="app">
			<!--
			v-on:click="函数名" 为标签添加事件
			@click="test2(2)"
			
			-->
			<input type="button" value="按钮1" v-on:click="test1(1)"/>
			<input type="button" value="按钮2" @click="test2(2)"/>
		</div>
		
		<script>
			/*
			 创建一个vue对象
			 */
			var app= new Vue({
				el:'#app',
				data:{
					message: '<b>Hello Vue!</b>',
					name:""
				},
				methods:{//在vue中声明函数
					test1(a){
						this.message = this.message.split("").reverse().join("");
					},
					test2(a){
						this.name = "tom";
					}
				}
			})
		</script>
	</body>
</html>

2.5 v-model 

作用:便捷的设置和获取表单元素的值

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!--导入vue.js-->
		<script src="js/v2.6.10/vue.min.js"></script>
	</head>
	<body>
		<div id="app">
			<!--
			v-model="变量" 把表单元素的value值 绑定到vue对象data中
			-->
			
			<input type="button" value="按钮2" @click="test2(2)"/>

			<input v-model="name"/>

		</div>
		
		<script>
			/*
			 创建一个vue对象
			 */
			var app= new Vue({
				el:'#app',
				data:{
					message: '<b>Hello Vue!</b>',
					name:""
				},
				methods:{//在vue中声明函数
					
					test2(a){
						this.name = "tom";
					}
				}
			})
		</script>
	</body>
</html>

2.6 v-show

作用:根据给定值的真假,切换元素的显示状态

原理:修改标签对应的display属性,实现显示和隐藏,效率高,v-show后面的值最终都会被解析为布尔值,为true表示显示,false表示隐藏

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 导入vue.js -->
		<script src="js/v2.6.10/vue.min.js"></script>
		
	</head>
	<body>
		<!--
		v-show="布尔值" true-显示 false-隐藏  控制标签display属性 隐藏显示标签的,效率高
		-->
		<div id="app">
			<img v-show="isShow" src="img/3.jpg" />

			<img v-show="age>18" src="img/4.jpg" /></br> <!--age>18为true,显示 age<=18为false 隐藏-->
			
			
			<input type="button" value="切换" v-on:click="oper()">
			
		<script>
			var v = new Vue({
				el: '#app',
				data:{
					isShow:true,
					age:15
				},
				methods:{
					oper(){
						this.isShow=!this.isShow;
						this.age = 19;
					}
				}
			})
		</script>
	</body>
</html>

 2.7 v-if

作用:根据v-if后面的表达式真假切换元素的显示状态,和v-show作用相同,但有一些差别

原理:当表达式为false时,表示隐藏,会直接将该标签删除,为true时又会重新创建该标签,效率比v-show低

注意区分v-show和v-if的区别

2.8 v-else

作用:v-else必须紧跟在v-if的后面,表示当if的条件不成立时,if后面的隐藏了,else后面的显示,当if条件成立,if后面显示,else后面隐藏

2.9 v-bind

作用:为元素绑定一个属性,写在v-bind后面的元素的值是一个变量,可以在vue的data中对其进行修改以达到动态改变的目的

写法:有两种

  1. v-bind:
  2. :

 第二种写法是在元素之前直接加一个冒号即可

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 导入vue.js -->
		<script src="js/v2.6.10/vue.min.js"></script>
		
	</head>
	<body>
		<!--
		需求: 标签的属性值可以 动态修改
		v-bind:属性名="变量名" 一旦为属性添加v-bind 值就是一个在data中定义的变量了
		还可以简写为:属性名
		-->
		
		<div id="app">
			<img v-bind:src="imgurl[index]" :title="array[index]">
			
			<input type="button" @click="oper()" value="操作" />
		</div>
		
		<script>
			var v = new Vue({
				el:"#app",
				data:{
					imgurl:["img/1.jpg","img/2.jpg","img/3.jpg","img/4.jpg","img/5.jpg"],
					array:["苹果手机","华为手机"],
					index:0,
					
				},
				methods:{
					oper(){
						if(this.index!=this.imgurl.length-1){
							this.index++;
						}else{
							this.index=0;
						}
						
					}
				}
			})
		</script>
	</body>
</html>

特殊:给class属性绑定一个bind,可以动态切换class

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 导入vue.js -->
		<script src="js/v2.6.10/vue.min.js"></script>

		<style>
			.active{
				color: red;
			}
		</style>

	</head>
	<body>
		<!--
		需求: 标签的属性值可以 动态修改
		v-bind:属性名="变量名" 一旦为属性添加v-bind 值就是一个在data中定义的变量了
		还可以简写为:属性名
		-->
		
		<div id="app">
			
			<div v-bind:class="{active:isActive}">www</div>

            <input type="button" @click="oper()" value="操作" />
			
		</div>
		
		<script>
			var v = new Vue({
				el:"#app",
				data:{
					
					isActive: true
				},
				methods:{
					
						oper(){

						this.isActive = !this.isActive;
					}
				}
			})
		</script>
	</body>
</html>

2.10 v-for

作用:根据数据生成列表结构

数组经常和v-for结合,通常将后端的数据以数组或集合的形式发送到前端,前端可以用v-for来将数组/集合中的内容显示到标签上(网页上)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/v2.6.10/vue.min.js"></script>
	</head>
	<body>
		<ul id="uid">
			<li v-for="(user,index) in users">
			{{index+1}}
			姓名:{{user.name}}
			年龄:{{user.age}}
			性别:{{user.gender}}
			</li>
			
		</ul>
		
		<script>
			var v = new Vue({
				el:"#uid",
				data:{

					users:[{name:"jim",age:20,gender:"男"},
					      {name:"tom",age:22,gender:"男"},
						  {name:"lili",age:20,gender:"女"}],

				},
			})
		</script>
	</body>
</html>

三. vue生命周期函数

vue对象在生命周期的每个阶段(创建前,创建后,挂载前,挂在后),都为我们提供了会自动执行的钩子函数,我们后端一般关注和标签挂载后,即mounted函数

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/v2.6.10/vue.min.js"></script>
	</head>
	<body>
		<ul id="uid">
			<li v-for="user in users">
			姓名:{{user.name}}
			年龄:{{user.age}}
			性别:{{user.gender}}
			</li>
			
		</ul>
		
		<script>
			var v = new Vue({
				el:"#uid",
				data:{
					
					users:[{name:"jim",age:20,gender:"男"},
					      {name:"tom",age:22,gender:"男"},
						  {name:"lili",age:20,gender:"女"}],
						  
					student:{name:"张三",age:18,gender:"男"}
				},
				methods:{//自定义函数
					
				}, //vue对象生命周期 钩子函数 在生命周期的每个阶段为我们提供了一个函数,可以自动执行
				beforeCreate(){//vue对象创建前
					console.log("beforeCreate");
				},
				created(){//vue对象创建后
					console.log("created");
				},
				beforeMount(){//vue对象挂载前
					console.log("beforeMount");
				},
				mounted(){ //vue对象创建成功 且 与标签绑定后执行 这是我们常用的,在此自动的与后端交互
					console.log("mounted");
				}
			})
		</script>
	</body>
</html>

四.前端项目结构

传统的前端项目结构:一个项目中有很多HTML文件,一个HTML文件表示一个网页,他们之间彼此独立,互相没有联系,我们每次导入其它前端文件时,需要给每一个HTML文件都导入,需要导入的文件一旦过多,就会很麻烦,并且整体看来很乱

现代的前端项目结构:在一个node环境中构建项目(类似于后端的maven),前端改为单页面结构,只有一个HTML文件,所有的配置都是基于这一个HTML文件进行配置,只需要配置一次即可.但是可以有很多的.vue文件,这些不再是一个网页,而是被称为一个组件,需要显示不同的内容时,只需要切换组件即可

五.在HBuilder X中搭建vue-cli项目

1. 安装node.js前端环境

node.js是一个前端运行的环境,可以为前端开发提供服务

下载地址:

https://nodejs.org/en/download

这里注意不勾选,其他的无脑下一步即可,尽量安装到没有中文的路径中,之后打开命令提示符,进行测试,如下,即完成安装

2. HBuilder X创建一个vue-cli项目 

注意:因为学的是vue2,所以选择3.6.10版本,第一次创建可能比较慢,要下载很多的依赖,创建完成后,会显示创建成功

3. vue-cli项目结构

4. 如何运行前端项目

补充(如何下载项目中依赖的组件):我们一般在网上下载的前端项目是没有node_modules文件夹的,因为这里面包含的是项目所依赖的外部组件文件,并且该文件夹占用的空间较大,我们可以通过node.js中的命令(类似于maven中的pom.xml文件)来从远程仓库中自己下载,所以不需要别人打包发过来,这样既省空间,又节约时间,该命令是npm install可以下载安装外部依赖组件

项目运行:我们可以打开HBuilder X的终端,输入命令npm run serve

终止项目:ctrl+c

打包项目: npm run build

5. 创建组件

在vue-cli项目的src文件夹下创建一个.vue文件,这里面可以用来写组件(网页)的相关内容

<!--该标签用于写HTML代码,必须有一个根标签,如下<div>是根标签-->
<template> 
	<div>
		登录
	</div>
</template>

<!--该标签用于写js代码,下面是固定格式return里写数据,methods里写函数-->
<script>
	export defaults{
		data(){
			return{
				
			}
		},
		methods:{
			
		}
	}
</script>


<!--该标签用于写css和之前一样-->
<style>

</style>

 6. 组件路由(页面跳转)

6.1 创建router目录

在src文件夹下创建router文件夹,并在router文件夹里创建一个index.js文件,在index.js文件中配置路由

配置路由主要是把自己定义的.vue文件(即组件)导入到index.js文件中,并为每个组件配置一个访问地址

1.导入vue

import Vue from 'vue';

2.删除package-lock文件 

npm config set package-lock false

使用这个命令以后生成的vue-cli项目中就不会有package-lock这个文件,记得还要删除当前项目中的package-lock这个文件, 因为这个文件中有一些其他版本号的文件,有可能会导致版本不支持等问题,所以建议删除

3.下载vue-router

由于要对组件进行页面跳转就要导入vue-router,但我们没有vue-router这个组件所以要先下载,通过下面语句在终端中执行可以下载vue-router

npm i vue-router@3.5.3

下载成功后在package.json文件中会有新的依赖版本号导入

4.导入路由

 import router from 'vue-router'; /* 导入路由 */

5.导入其他组件

<!--login是你创建组件的组件名,也就是.vue文件的文件名,创建了几个就导入几个-->
<!--
'../views/login'是.vue文件的路径,两个点表示的是回退到上级目录
因为.js文件在router文件中,而我们要导入的组件(.vue文件)和router在一级
所以要回退到.router目录中
-->
import login from '../views/login'; /* 导入其他组件 */

注意:

(1)login是你创建组件的组件名,也就是.vue文件的文件名,创建了几个就导入几个


(2)'../views/login'是.vue文件的路径,两个点表示的是回退到上级目录因为.js文件在router文件中,而我们要导入的组件(.vue文件)和router在一级,所以要回退到.router目录中

 6.注册,定义组件访问地址

/*  注册  定义组件访问地址  */
  Vue.use(router);

7.为组件路由定义地址

/* 定义组件路由 */
   var rout = new router({
    routes: [
        {
           path: '/index',
           component: Index
        },
        {
           path: '/login',
           component: Login
        },
		{
		   path: '/reg',
		   component: Reg
		}
    ]
});

 注意:

(1)path:为组件路由定义访问地址,这个地址以/开始,名字可以任意取,建议和.vue文件(组件)名相同,但是是以小写字母开头

(2)component:这个是和你.vue文件(组件)的名字完全一致,大小写也一致

8. 导出路由对象

export default rout;

 default后面的名字和你上一步为组件路由定义访问地址时new router对象的名字一致

以上所有步骤做完后,index.js文件中应该是这样

6.2 使用路由

在你要访问的第一个页面中为内容添加跳转链接

<div>
		首页
		<router-link to="/login">登录</router-link>
		<router-link to="/reg">注册</router-link>
</div>

 

6.3 在main.js中配置路由

在main.js中将刚才配置好的index.js文件导入进去,并将,router对象绑定到全局唯一的vue对象中

<!--路径中一个点表示同级目录下-->
import router from './router/index.js'

 Vue.use(router);
 new Vue({
 el: '#app',
 router,
 render: h => h(App)
 })

 最后在终端使用npm run serve启动项目,如果出现访问地址则表示配置成功

 

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

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

相关文章

pytorch-梯度下降

梯度下降 y x 2 ∗ s i n ( x ) y ′ 2 x s i n x x 2 c o s x x 1 x − Δ y ′ ( x ) 其中 Δ 表示学习率&#xff0c; y ′ ( x ) 代表 y 在 x 点处关于 x 的梯度。 y x^2 * sin(x) \\ y 2xsinxx^2cosx \\ x_1 x - \Delta y(x) \\ 其中 \Delta 表示学习率&#xff0c…

qt表格模型视图

Qt 提供了一套强大的模型/视图框架&#xff0c;允许你以一种非常灵活和高效的方式显示和处理数据。在 Qt 中&#xff0c;表格视图&#xff08;TableView&#xff09;和模型&#xff08;TableModel&#xff09;是这种框架的一部分&#xff0c;常用于显示和编辑表格数据。 以下是…

便携式气象仪:科技赋能,让气象观测更智能

随着科技的快速发展&#xff0c;越来越多的领域受益于技术的进步。其中&#xff0c;气象观测领域也不例外。传统的气象观测设备虽然精确可靠&#xff0c;但往往体积庞大、携带不便&#xff0c;且需要专业人员进行操作和维护。而便携式气象仪的出现&#xff0c;则打破了这一局限…

BGP路由反射器

原理概述 缺省情况下&#xff0c;路由器从它的一个 IBGP对等体那里接收到的路由条目不会被该路由器再传递给其他IBGP对等体&#xff0c;这个原则称为BGP水平分割原则&#xff0c;该原则的根本作用是防止 AS内部的BGP路由环路。因此&#xff0c;在AS内部&#xff0c;一般需要每台…

深度解读大语言模型中的Transformer架构

一、Transformer的诞生背景 传统的循环神经网络&#xff08;RNN&#xff09;和长短期记忆网络&#xff08;LSTM&#xff09;在处理自然语言时存在诸多局限性。RNN 由于其递归的结构&#xff0c;在处理长序列时容易出现梯度消失和梯度爆炸的问题。这导致模型难以捕捉长距离的依…

《知识点扫盲 · Redis 序列化器》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

【2024最新版】Stable diffusion汉化版安装教程(附SD安装包),一键激活,永久免费!

目前广泛使用的Stable Diffusion Web UI简称(SDWebUI)是发布在开源平台Github上的一个Python项目,与通常的软件安装方法不同,这个项目并不是下载并安装即可使用的应用程序,而是需要准备执行环境,编译源码. 如果你是一个新手不会安装,现在可以直接使用一键启动包. 例如:国内的…

【Linux】信号量与生产消费模型

我们已经实现过锁条件变量的PC模型&#xff0c; 但是BlockingQueue并不能进行生产与消费的并发&#xff0c;原因在于我们使用的是STL提供的队列&#xff0c;进行了一个适配&#xff0c;底层的实现可能会修改到成员变量造成未知的错误。 而这次我们选择使用环形队列&#xff08…

python实现盲反卷积算法

python实现盲反卷积算法 盲反卷积算法算法原理算法实现Python实现详细解释优缺点应用领域盲反卷积算法 盲反卷积算法是一种图像复原技术,用于在没有先验知识或仅有有限信息的情况下,估计模糊图像的原始清晰图像和点扩散函数(PSF)。盲反卷积在摄影、医学成像、天文学等领域…

监控Windows文件夹下面的文件(C#和C++实现)

最近在做虚拟打印机时&#xff0c;需要实时监控打印文件的到达&#xff0c;并移动文件到另外的位置。一开始我使用了线程&#xff0c;在线程里去检测新文件的到达。实际上Windows提供了一个文件监控接口函数ReadDIrectoryChangesW。这个函数可以对所有文件操作进行监控。 ReadD…

当 Nginx 出现请求的乱序到达,如何处理?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 当 Nginx 出现请求的乱序到达&#xff0c;如何处理&#xff1f;一、理解请求乱序到达的现象二、请求乱序到达可能带来的影响三、解决方案&#xff08;一&#xf…

安卓嘀嗒清单v7.2.2.2高级版

软件介绍 TickTick是一款轻便高效的任务管理、日程管理&#xff08;GTD&#xff09;和时间管理应用&#xff0c;配备强大的记事和提醒功能。你可以在手机、平板、网页等多达11个平台上使用滴答清单记录大小事务、制定工作计划、整理购物清单、设置生日提醒&#xff0c;甚至安排…

CSS技巧专栏:一日一例 12 -纯CSS实现边框上下交错的按钮特效

CSS技巧专栏&#xff1a;一日一例 12 -纯CSS实现边框上下交错的按钮特效 大家好&#xff0c;今天我们来做一个上下边框交错闪动的按钮特效。 本例图片 案例分析 虽说这按钮给人的感觉就是上下两个边框交错变换了位置&#xff0c;但我们都知道border是没法移动的。那么这个按…

土耳其云手机提升TikTok电商效率

在数字化飞速发展的今天&#xff0c;TikTok不仅是一个社交平台&#xff0c;更是一个巨大的电商市场。随着TikTok电商功能在全球范围内的扩展&#xff0c;土耳其的商家和内容创作者正面临着前所未有的机遇。本文将详细介绍土耳其云手机怎样帮助商家抓住机遇&#xff0c;实现业务…

单片机学习历程

学习单片机的过程可以分为几个主要阶段&#xff0c;每个阶段都涉及不同的学习内容和技能提升。下面我将以一个典型的学习历程为例进行介绍&#xff1a; 初学阶段 1.入门理论学习&#xff1a; 开始接触单片机的基础知识&#xff0c;学习其工作原理、体系结构和常见的芯片类型…

怎样在 Nginx 中配置基于请求客户端 Wi-Fi 连接状态的访问控制?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 怎样在 Nginx 中配置基于请求客户端 Wi-Fi 连接状态的访问控制一、理解请求客户端 Wi-Fi 连接状态二、Nginx 中的访问控制基础知识三、获取客户端 Wi-Fi 连接状态…

Qt 使用视口和窗口作图

物理坐标系与逻辑坐标系 绘图设备的物理坐标系是基本的坐标系&#xff0c;通过 QPainter 的平移、旋转等坐标变换可以得到更容 易操作的逻辑坐标系。 物理坐标系也称为视口&#xff08;viewport&#xff09;坐标系&#xff0c;逻辑坐标系也称为窗口&#xff08; window&…

《操作系统》(学习笔记)(王道)

一、计算机系统概述 1.1 操作系统的基本概念 1.1.1 操作系统的概念 操作系统&#xff08;OperatinggSystem&#xff0c;OS&#xff09;是指控制和管理整个计算机系统的硬件与软件资源&#xff0c;合理地组织、调度计算机的工作与资源的分配&#xff0c;进而为用户和其他软件…

[STM32]HAL库实现自己的BootLoader-BootLoader与OTA-STM32CUBEMX

目录 一、前言 二、BootLoader 三、BootLoader的实现 四、APP程序 五、效果展示 六、拓展 一、前言 听到BootLoader大家一定很熟悉&#xff0c;在很多常见的系统中都会存在BootLoader。本文将介绍BootLoader的含义和简易实现&#xff0c;建议大家学习前掌握些原理基础。 …

简单谈谈 手机版买卖现货白银的好和不好

随着科技的发展&#xff0c;现在买卖现货白银可以在移动设备上进行&#xff0c;那意味着投资者通过手机、平板电脑等都可以进行交易&#xff0c;这进一步解放了投资者交易的场所限制&#xff0c;让投资者有了更大的自由度。有条件的朋友&#xff0c;除了通过个人电脑做现货白银…