今日份分享内容

- html>
- <html>
- <head>
- <meta charset="utf-8">
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
- <title>1、事件处理器title>
- <style type="text/css">
- .red{
- width: 400px;
- height: 400px;
- background-color: red;
- }
- .yellow{
- width: 300px;
- height: 300px;
- background-color: yellow;
- }
- .blue{
- width: 200px;
- height: 200px;
- background-color: blue;
- }
- .green{
- width: 100px;
- height: 100px;
- background-color: green;
- }
-
- style>
- head>
- <body>
-
- <div id="app">
- <div class="red" @click="red">
- <div class="yellow" @click="yellow">
- <div class="blue" @click="bule">
- <div class="green" @click="green">div>
- div>
- div>
- div>
- div>
- <script type="text/javascript">
- new Vue({
- el:'#app',
- data(){
- return{
- msg:'hello,我是一杯咖啡!'
- }
- },
- methods:{
- red(){
- alert('red');
- },
- yellow(){
- alert('yellow');
- },
- bule(){
- alert('bule');
- },
- green(){
- alert('green');
- }
- }
- })
- script>
- body>
- html>

如上图、代码所示,是由四个div标签嵌套而成的,四个div标签对应了四个颜色也分别对应了四个点击事件,点击不同的颜色会出现不同的弹出内容,由于使用div一个套着一个的,也就是由四个正方形叠加起来了,如果我点击最上面的绿色那么也就会从上到下依次弹出绿色>蓝色>黄色>红色四个点击事件所对应的内容,那么问题来了,如果只想让所点击的绿色弹出内容应该怎么办呢?
什么是冒泡事件? 如图所示:

这样就只会触发绿色部分的点击事件了。
在客户使用某个查询功能的时候,当网络缓慢的时候,下意识的可能会多次点击那个查询的按钮,对于客户而言觉得并没什么,但是对于服务端来说,就有点类似于刻意攻击,因为当每点击一次按钮,就会向后台数据发送一次请求,就会抢占服务器的资源,那么我们作为开发者应该可以怎样做呢?

效果图展示: 点击确定之后就不会再弹出内容了

按键修饰符顾名思义也就是跟你的键盘绑定的事件。
例如回车键:

效果展示: 光标移入文本框内点击回车键就可以弹出窗口。

事件修饰符
.stop
.prevent
.capture
.self
.once
...
...
按键修饰符
Vue允许为v-on在监听键盘事件时添加按键修饰符:
Vue为最常用的按键提供了别名
全部的按键别名:
.enter
.tab
.delete (捕获 "删除" 和 "退格" 键)
.esc
.space
.up
.down
.left
.right
.ctrl
.alt
.shift
.meta
好啦,事件处理器这一节的分享内容就介绍到这里,进入第二节~
组件(Component)是Vue最强大的功能之一
组件可以扩展HTML元素,封装可重用的代码
组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树
自定义组件是什么?
自定义组件就是自己设置标签,然后实现它。后面我将会给大家分享如何使用别人的组件,比如之后的ElementUI里就封装了很多的组件,如果有学前端的朋友们,在自定义组件这一块是需要更加深入了解的喔!

所以接下来有两种传参方式,给我们的自定义组件进行传值。

props是父组件用来传递数据的一个自定义属性。
父组件的数据需要通过props把数据传给子组件,子组件需要显式地用props选项声明 "prop"

父传子:props
子传父(触发事件):$emit(eventName)全局和局部组件
全局组件:Vue.component(tagName, options),tagName为组件名,options为配置选项。
局部组件: new Vue({el:'#d1',components:{...}})
注1:Vue自定义事件是为组件间通信设计
vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定
父Vue实例->Vue实例,通过prop传递数据
子Vue实例->父Vue实例,通过事件$emit传递数据注2:事件名
不同于组件和prop,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称
建议使用“短横线分隔命名”,例如:three-click
- html>
- <html>
- <head>
-
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
- <meta charset="utf-8">
- <title>title>
- head>
- <body>
- <div id="app">
-
- 姓名:<input type="text" v-model="uname"/><br>
- 密码:<input type="password" v-model="pwd"/><br>
- 年龄:<input type="text" v-model="age"/><br>
- 性别:<input type="radio" name="sex" checked="checked"/>男
- <input type="radio" name="sex"/>女<br>
- 爱好:
- <div v-for="l in likes">
- <input v-model="hobby" type="checkbox" :value="l.id"/>{{l.name}}
- div><br>
- 英语等级:
- <select v-model="selectedVal">
- <option v-for="e in englishs" :value="e.id">{{e.name}}option>
- select><br>
- <input @click="show" type="checkbox" />
- <input v-show="showFlag" @click="sub" type="button" value="ok" />
- <div>div>
- div>
- body>
- <script type="text/javascript">
- new Vue({
- el:'#app',
- data() {
- return {
- uname:null,
- pwd:null,
- age:null,
- sex:1,
- likes:[ //爱好的数据源
- {id:1,name:'篮球'},
- {id:2,name:'足球'},
- {id:3,name:'桌球'},
- {id:4,name:'乒乓球'}
- ],
- englishs:[ //英语的数据源 下拉框
- {id:1,name:'优'},
- {id:2,name:'良'},
- {id:3,name:'差'}
- ],
- hobby:[],//用来存放选中的爱好 比如1,3
- selectedVal:0,
- showFlag:false
- }
- },
- methods:{
- show() {
- this.showFlag = true;
- },
- sub(){
- // 后续都是json数据交互,向后台提交json对象
- var obj = {
- uname:this.uname,
- pwd:this.pwd,
- age:this.age,
- sex:this.sex,
- hobby:this.hobby,
- level:this.selectedVal
- }
- console.log(obj);
- }
- }
- })
- script>
- html>
运行结果:
