vue click事件_Vue.js---实现前后端分离架构中前端页面搭建(二)

6eee36c3d1a57da79ed5e57879747fa4.png

【Vue.js实现前后端分离架构中前端页面搭建】

九、Vue的事件处理

Vue的事件都是使用 v-on:事件类型 进行绑定。也可以使用@事件类型进行操作。其中事件类型和之前学习jQuery中事件名称是一样。

示例中都是以点击事件为例。

1. 直接操作属性值

代码示例中通过点击按钮对counter值加一。下面<p>中显示属性值。所以会出现点击按钮后下面数字在变化的效果

<template><div id="app"><button v-on:click="counter += 1">Add 1</button><p>The button above has been clicked {{ counter }} times.</p></div>
</template><script>export default {name: 'App',data() {return {counter: 0}}
}
</script>

也可以把上面的v-on:click换成@click。

3a036440716a9a18ed19b4c9528e5c41.png

2. 事件处理方法

Vue中事件也可以绑定给特定的方法进行处理。

@click取值是方法名称

methods是固定属性。里面定义了多有事件能绑定的方法。

jqk:function(event)中

jqk 是方法名。

event是方法形参,在js中方法形参名称随意。只要@click中使用没有参数的方法时,都会默认传递事件对象。如果方法中不使用事件对象,function里面就不需要写event了,在Vue中变量声明后必须使用

<template><div id="app"><button @click="jqk">click</button></div>
</template><script>export default {name: 'App',data(){return {field:"值"};},methods:{jqk:function (event) {// this是当前Vue对象alert(this.field);if(event){alert(event.target.tagName)}}}
}
</script>

3. 事件传参

事件传参只需要在调用方法时加上括号和要传递的参数就可以了。

注意:

字符串值必须有单引号。

没有单引号参数(field),调用data()中属性

方法中不需要使用事件对象时就不写$event。但是如果需要使用事件对象,必须手动传递事件对象,且必须叫做$event,$event是全局Vue对象原型(prototype)里面的属性。

<template><div id="app"><button @click="jqk('name',$event)">click</button><button @click="jqk(field,$event)">click</button></div>
</template><script>export default {name: 'App',data(){return {field:"值"};},methods:{jqk:function (name,event) {alert("name:"+name);if(event){alert(event.target.tagName)}}}
}
</script>

十、组件

组件:如果项目中多次用到类似效果,就可以把这个效果进行自定义组件。

新建项目后默认存在HelloWorld.vue就是一个组件。

import Helloworld .... 组件文件必须导入才能使用。其中Helloworld为自定义名称,通过这个名称就可以调用对应组件。如果import时直接写组件名(大小写相同)IDEA会提升生成组件的路径,所以一般习惯上都是把名称定义为组件文件名。

components: 组件文件只import是不能被使用的。必须在components中注册组件,注册后在<template>中就可以通过组件名直接引用组件了。在<template>中组件以标签形式存在,标签名为组件名。其中msg是在Helloworld中定义的props参数,表示需要传递给组件的数据。

8532f0ea4101a8ce57ca3018152f5185.png

1. 新建vue文件

在Vue中组件就是可复用的页面内容。以.vue文件形式存在。

在src/components中新建一个文件。名称任意。示例中叫做MyComponent.vue。

在Vue中组件的文件名多使用大驼峰。

a8853e8e9ec22bd313eee74a990ded25.png

{{jqk}} 获取组件传递参数的值

props:定义组件传递的参数名称和类型

<template><div><div>这是一个组件</div><div>{{jqk}}</div></div>
</template><script>export default {name: "MyComponent",props: {jqk: String}}
</script><style scoped></style>

2. 修改App.vue

<MyComponent>就是下面定义的组件名称。jqk是参数名

import 导入组件并设置名称为MyComponent

components 声明组件

<template><div id="app"><MyComponent jqk="这是传递的内容"/></div>
</template><script>import MyComponent from "@/components/MyComponent";export default {name: 'App',components:{MyComponent}
}
</script>

十一、路由

组件和页面的区别?

组件和页面文件中内容是完全相同,唯一区别是组件可能被多次使用,import时会给组件定义个名称,而页面文件可能只使用一次,import时就不需要定义名称。在项目中为了区分页面和组件,把组件放在components文件夹而页面放在pages(名称随意,一般多叫pages)文件夹下。

755ed141461e745282c144b560d6f333.png

为什么使用路由?

在项目中创建了First.vue和Second.vue。如果按照组件方式进行操作这个两个页面中数据固定显示在App.vue中。但是我们知道正常项目都是通过不同的URL控制显示不同页面。在SPA项目中也是需要通过不同的URL在App.vue中显示不同的数据。

现在缺少一个可以通过URL控制哪个页面显示在App.vue中的功能/组件。路由就是做这件事情的。

什么是路由?

在Vue中路由就是控制显示哪个页面。通过路由显示的页面是显示在App.vue中的,这符合SPA,当更改URL后只改变App.vue页面中路由对应的部分的内容,也就是说通过路由显示时也是属于局部刷新效果。

在App.vue中通过<router-view/>显示路由内容。

简单一句话说明:通过识别URL显示页面的功能。

1. 安装路由依赖

在IDEA中的terminal面板运行命令。--save表示把添加的依赖写入到package.json。如果没有--save效果上也可以,但是加上可以更好的知道项目都使用了哪些组件。

809a6686b3d75e8d512cbb8bb65cfeee.png

使用terminal时也需要注意下,命令是否在当前项目的根路径下。

运行成功后会在package.json中多了router相关依赖。

4f91b0408bf26d661d47c8670247ca2c.png

2. 新建两个页面

在src下新建了page文件夹。在文件夹下新建了两个.vue的页面

25ef9ddb4f71dfdc17d02d5491b7f839.png

页面内容也只是写了字符串first。另一个页面first换成second,其他都相同。

此时这两个页面是无法访问的。

<template><div>first</div>
</template>
<script>export default {name: "First"}
</script>
<style scoped>
</style>

3. 修改main.js

import Vue from 'vue'
import App from './App.vue'
// 导入路由依赖。安装了vue-router组件后系统带有的依赖。
import VueRouter from 'vue-router'
// 导入两个页面
import First from "@/pages/First";
import Second from "@/pages/Second";Vue.config.productionTip = false;
// 使用路由
Vue.use(VueRouter);
// 创建路由对象。new VueRouter为上面import设置的名称
// 路由对象名称,必须是router。其他命名都无法提供路由表功能,页面抛出异常:
// TypeError: Cannot read property 'matched' of undefined
const router = new VueRouter({// 没有history,访问URL会有#mode:"history",routes:[{path:"/first",component:First},{path:"/second",component:Second}]
});new Vue({// 使用router对象router,render: h => h(App),
}).$mount('#app')

4. 修改App.vue

必须要有<router-view/> 否则无法显示路由控制的页面。

<template><div id="app"><router-view/><MyComponent jqk="这是传递的内容"/></div>
</template>

5 优化结构

把main.js中和路由相关的内容放到一个单独的js文件中。这样维护更好。

5.1 编写index.js文件

f40cc9560f93a3d99fa5f6d6edae649e.png

在src下新建router文件夹,在文件夹中新建index.js。

注意文件的第一行和最后一行。

// 必须有这个导入,否则使用路由报错
import Vue from 'vue'
// 导入路由依赖
import VueRouter from 'vue-router'
// 导入两个页面
import First from "@/pages/First";
import Second from "@/pages/Second";// 使用路由
Vue.use(VueRouter);
// 创建路由对象。new VueRouter为上面import设置的名称
const router = new VueRouter({// 没有history,访问URL会有#mode:"history",routes:[{path:"/first",component:First},{path:"/second",component:Second}]
});
// 必须有这个导出,否则main.js无法获取router对象
export default router

5.2 修改main.js

引入router下index.js文件。

import Vue from 'vue'
import App from './App.vue'
// Vue中index.js是默认js文件名。下面引用时省略了index
import router from "@/router";
Vue.config.productionTip = falsenew Vue({router,render: h => h(App),
}).$mount('#app')

十二、发起网络请求和跨域处理

Vue中使用axios进行网络请求。使用起来和jQuery中$.get和$.post功能类似。

给定服务端控制器代码。可以接收name和age参数,设置到Map中并返回。

一定要注意:控制器上有跨域注解。前后端分离都是跨域请求。且端口不能是8080端口。

@RestController
@CrossOrigin
public class DemoController {@RequestMapping("/demo")public Map<String,Object> demo(String name ,Integer age){Map<String,Object> result = new HashMap<>();result.put("name",name);result.put("age",age);return result;}
}

1. 安装依赖

a08d58bd695e1ebaf3e814290680048e.png

2. get请求

<template><div>发起请求</div>
</template><script>import axios from "axios"export default {name: "axios",
// 页面加载事件。mounted() {axios.get("http://localhost:8081/demo?name=bjsxt&age=12").then(res => {console.log(res.data);}).catch(error => {console.log(error);})}}
</script><style scoped></style>

3. post方式

下面演示了使用POST获取值后把name显示在页面的过程。

注意:

POST也支持URL重写方式传参。通过?和&传参数。

如果使用下面这种方式传参必须要结合querystring使用。

<template><div>发起请求获取到的结果。{{name}}</div>
</template><script>import axios from "axios"import qstring from "querystring"export default {name: "axios",data() {return {name: ""};},mounted() {axios.post("http://localhost:8081/demo", qstring.stringify({name: "张三",age: 12})).then(res => {console.log(res.data.name);this.name = res.data.name;}).catch(error => {console.log(error);})}}
</script><style scoped></style>

4. axios全局设置

如果使用上面的方式,将需要在每个页面中都导入axios。

也可以全局绑定axios。

4.1 修改main.js

Vue.prototype.$jqk=axios 中

Vue 全局Vue对象

prototype 原型。设置全局属性。

$jqk 随意设置的名称。

axios 依赖对象名

import Vue from 'vue'
import App from './App.vue'
// Vue中index.js是默认js文件名。下面引用时省略了index
import router from "@/router";
import axios from "axios"
import qstring from "querystring"Vue.prototype.$axios = axios
Vue.prototype.$qstring=qstring
Vue.config.productionTip = falsenew Vue({router,render: h => h(App),
}).$mount('#app')

4.2 页面中写法

在任何页面中都可以直接使用this.$jqk进行设置。

<template><div>这是首页。所有内容都显示在这个页面中。SPA<br/>姓名:{{name}}, 年龄:{{age}}</div></template><script>export default {data() {return {name:"",age:0};},mounted() {this.$axios.post("http://localhost:8081/demo",this.$qstring.stringify({name:"北京尚学堂",age:15})).then(response => {this.name = response.data.name;this.age = response.data.age}).catch(error => {console.log(error)})}}
</script>

十三、请求代理

在Vue中发起网络请求时URL都使用完整URL,可以把公共URL提出,提出后发起网络请求时URL只写路径部分。省略协议、ip、端口。

如果没有请求代码每次在浏览器开发者工具看见真实请求服务器地址,这样话就把服务器暴露给客户端了。使用代理后只能看见代理前请求,保护真实服务器地址。

在项目根路径(不是src)下新建vue.config.js。名称固定

406506440048faeea1d14eed1812ce23.png

这个配置文件操作完成后必须重启

ef9e429588aeb0f0134135a290a44767.png

发起请求时可以使用/api/xxx 的形式

bdb19b2da1db37a9c074af66894a127e.png

在开发者工具看见的请求

f223f8f3dad501870984858938425dfc.png

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

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

相关文章

边缘计算的五个大坑,里面一定有你跳过的

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 砍柴网责编 | 阿秃在规模和增速方面&#xff0c;美国市场调研公司CB Insights估算&#xff0c;到2023年全球边缘计算行业&#xff0c;整体市场容量有望达到340亿美元。Technavio估计&#xff0c;从2018年到2022年&#xff0…

黑科技揭秘:眼科大夫如何应用5G+8K完成远程会诊?

秋季苹果新品发布会带来了iPhone迄今最大的显示屏&#xff0c;超视网膜显示屏比以往的iPhone屏幕更加清晰绚丽。随着影像技术的不断发展&#xff0c;多种多样的信息元素&#xff0c;通过一块块屏幕与我们交互&#xff0c;不管是手机手屏还是电视&#xff0c;不管是液晶还是OLED…

基于TableStore的物联网元数据管理

背景 常见的企业级无线接入方案有两种&#xff0c;分别被称作廋AP和胖AP。瘦AP&#xff08;ACAP&#xff09;架构为比较传统的企业级无线接入方案&#xff0c;主要优点就是漫游体验好&#xff0c;但是AC宕机的话会导致所属的AP全部无法工作。对于大型的办公场所&#xff0c;漫…

BDTC 2019 | 七个开发者能干多大的事?​

2015年&#xff0c;马云带领阿里巴巴集团的高管拜访了位于芬兰游戏公司supercell这家公司开发出了《部落战争》、《皇室战争》、《海岛奇兵》等App端知名游戏图片来自多玩BBS社区但是&#xff0c;这么知名的游戏公司开发团队当时却不足7人&#xff01;整个团队好像cell一样&…

Mac 神兵利器(三) 使用Intellij IDEA打造全栈IDE

前言 作为一个开发者&#xff0c;包括职业与业余&#xff0c;相信大家都在使用集成开发环境IDE。作为专业的开发者&#xff0c;相信大家都是Full Stack Developer&#xff0c;意味着我们的日常开发通常都会涉及多种编程语言比如Java、Python、Shell、Golang、大前端等&#xf…

阿里云与MongoDB达成战略合作,成“唯一”;苹果将推出三款5G版iPhone;谷歌正式推出 TensorFlow 企业版……...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

RabbitMQ 镜像集群队列_集群高可用篇_03

文章目录一、普通集群搭建1. 停止 全部 MQ服务节点2. 文件(.erlang.cookie)同步3. 组成集群操作3. slave 加入集群操作4. 查看集群状态5. 访问管控台界面二、配置镜像队列2.1. 镜像队列思路2.2. 策略执行2.3. 登录管控台查看配置的策略信息一、普通集群搭建 1. 停止 全部 MQ服…

MaxCompute Tunnel上传典型问题场景

数据问题 Q&#xff1a;使用Tunnel Java SDK上传数据&#xff0c;上传数据可以自动分配到各个分区吗&#xff1f; A&#xff1a;目前Tunnel是无法自动上传数据并自动分配到各个分区的&#xff1a;每一次上传只支持数据上传到一张表或表的一个分区&#xff0c;有分区的表一定要…

开箱即用的安全方案:MaxCompute数据安全方案介绍

MaxCompute 是一个支持多租户的统一大数据处理平台&#xff0c;不同的用户对数据安全需求不尽相同。为了满足不同租户对数据安全的灵活需求&#xff0c;MaxCompute 支持项目空间级别的安全配置&#xff0c;ProjectOwner 可以定制适合自己的外部账号支持和鉴权模型并且在某种程度…

RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成负载均衡组件 Ha-Proxy_02

服务器IPhostname节点说明端口管控台地址账号密码192.168.0.115mq-01rabbitmq master5672http://192.168.0.115:15672guestguest192.168.0.117mq-02rabbitmq slave5672http://192.168.0.117:15672guestguest192.168.0.118mq-03rabbitmq slave5672http://192.168.0.118:15672gue…

腾讯云连续三年登上KVM开源贡献榜,引领KVM技术标准!

近日在KVM社区最为重要和权威的大会KVM Forum上&#xff0c;2019年全球企业对KVM的贡献排名正式对外公布&#xff0c;腾讯云凭借本年度40个patch的贡献名列全球第七&#xff0c;连续三年成为国内唯一登榜的云计算服务商。 对此腾讯云虚拟化资深研发专家李万鹏介绍&#xff0c;腾…

异构计算:软硬件结合全栈助力AI大爆发

9月20日上午&#xff0c;杭州云栖小镇E1-2会场&#xff0c;备受业界关注的2018年杭州云栖大会异构计算专场召开。 近年来&#xff0c;人工智能持续爆发&#xff0c;对算力提出了更高的要求。异构计算作为大计算时代的解决方案&#xff0c;意在打破传统通用计算的限制&#xff…

弹性计算平台技术:云服务器“安全”“稳定”“弹性”的基石

9月19日上午9点&#xff0c;杭州云栖小镇E1-3会场&#xff0c;2018年杭州云栖大会弹性计算平台技术专场拉开帷幕。 弹性计算系列产品是云时代的基石产品之一&#xff0c;一直备受外界关注。作为弹性计算团队在本届云栖大会的开场大戏&#xff0c;平台技术专场吸引了超过200位与…

RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成高性能高可用组件 Keepalived_03

服务器IPhostname节点说明端口管控台地址账号密码192.168.0.115mq-01rabbitmq master5672http://192.168.0.115:15672guestguest192.168.0.117mq-02rabbitmq slave5672http://192.168.0.117:15672guestguest192.168.0.118mq-03rabbitmq slave5672http://192.168.0.118:15672gue…

AirPods Pro 到底「Pro」在哪里?

2019 嵌入式智能国际大会即将来袭&#xff01;购票官网&#xff1a;https://dwz.cn/z1jHouwEAirPods Pro一出&#xff0c;又被网友疯狂恶搞。有吐槽AirPods Pro&#xff0c;只是AirPods的复制版本的。有吐槽AirPods Pro&#xff0c;像个吹风机的。有吐槽像植物大战僵尸的。2018…

python pow和**_「Python学习笔记」Python函数高级应用

Python, 函数本身也是一个对象函数既可以赋值&#xff0c;也可以用作其他函数的参数&#xff0c;还可作为其他函数的返回值。使用函数变量Python的函数也是一种值&#xff1a;所有函数都是function对象&#xff0c;这意味着可以把函数本身赋值给变量&#xff0c;就像把整数、浮…

黑科技揭秘:如何通过阿里云超算,使得汽车仿真效率提升25%

在汽车行业&#xff0c;过去有一句俗话&#xff0c;一辆车从设计到下线&#xff0c;“至少要11辆真实碰撞试验”&#xff0c;今天&#xff0c;在现代化的汽车制造业&#xff0c;通过长期发展的设计和仿真软件&#xff0c;几乎所有的环节&#xff0c;都可以做到设计与仿真一体化…

更改应用程序图标_苹果更新 TestFlight 应用图标,增加更多拟真细节

TestFlight 是苹果公司针对开发者分发测试软件的应用&#xff0c;开发者可通过 TestFlight 向最多1万名测试者分发待测试应用。测试者在测试使用软件的同时&#xff0c;还可以向开发者提供使用意见或遇到的问题。最近&#xff0c;标志情报局发现&#xff0c;TestFlight 应用程序…

在一夜暴富之前,我先一夜秃了头

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 朱小五and王小九责编 | 阿秃与天斗&#xff0c;其乐无穷&#xff1b;与地斗&#xff0c;其乐无穷&#xff1b;与发际线斗&#xff0c;虽败犹荣……年轻人&#xff0c;今天的你比昨天更秃了吗&#xff1f;口说无凭&#xff…

负载均衡工具 haproxy 单机安装部署完整流程

负载均衡是系统设计最常见的一种方式&#xff0c;Nginx、HAProxy、LVS、F5用得比较普遍&#xff0c;不过Nginx只能在HTTP层负载&#xff0c;而HAProxy即可以在7层做负载&#xff0c;也可以在4层做负载&#xff0c;LVS配置有点太麻烦。 HAProxy是免费、极速且可靠的用于为TCP和基…