一、事件冒泡

方法一、使用event.cancelBubble = true来组织冒泡

<div @click="show2()">

    <input type="button" value="按钮" @click="show1($event)">

    </div>

    methods:{

        show1:function(ev){

            console.log(ev);

            alert(1);

            ev.cancelBubble=true;   /*阻止冒泡*/

        },

        show2:function(){

            alert(2);

        }

    }

方法二:使用vue自带的方法组织冒泡

<div @click="show2()">

            <input type="button" value="按钮" @click.stop="show1()">

        </div>

拓展:事件修饰符

参考API:http://cn.vuejs.org/v2/guide/events.html#事件修饰符

在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。尽管我们可以在 methods 中轻松实现这点,但更好的方式是:methods 只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。

为了解决这个问题, Vue.js 为 v-on 提供了 事件修饰符。通过由点(.)表示的指令后缀来调用修饰符。

.stop

.prevent

.capture

.self

.once

<!-- 阻止单击事件冒泡 -->

<a v-on:click.stop="doThis"></a>

<!-- 提交事件不再重载页面 -->

<form v-on:submit.prevent="onSubmit"></form>

<!-- 修饰符可以串联  -->

<a v-on:click.stop.prevent="doThat"></a>

<!-- 只有修饰符 -->

<form v-on:submit.prevent></form>

<!-- 添加事件侦听器时使用事件捕获模式 -->

<div v-on:click.capture="doThis">...</div>

<!-- 只当事件在该元素本身(而不是子元素)触发时触发回调 -->

<div v-on:click.self="doThat">...</div>

<!-- 点击事件将只会触发一次 -->

<a v-on:click.once="doThis"></a>

二、键盘事件

<input type="text" @keydown="show">

show:function(){

     alert(1);

    }

    <input type="text" @keydown="show2($event)">

    show2:function(ev){

        console.log(ev.keyCode);

        if(ev.keyCode==13){

            alert('按下了回车键盘');

        }

    },

  <input type="text" @keyup="show3($event)">

show3:function(ev){

        console.log(ev.keyCode);

        if(ev.keyCode==13){

            alert('回车键盘弹起的时候触发的事件show3');

        }

    }

拓展:按键修饰符

参考API:http://cn.vuejs.org/v2/guide/events.html#按键修饰符

在监听键盘事件时,我们经常需要监测常见的键值。 Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:

<!-- 只有在 keyCode 是 13 时调用 vm.submit() -->

<input v-on:keyup.13="submit">

记住所有的 keyCode 比较困难,所以 Vue 为最常用的按键提供了别名

<!-- 同上 -->

<input v-on:keyup.enter="submit">

<!-- 缩写语法 -->

<input @keyup.enter="submit">

全部的按键别名:

.enter

.tab

.delete (捕获 “删除” 和 “退格” 键)

.esc

.space

.up

.down

.left

.right

.ctrl

.alt

.shift

.meta

********

注意:在Mac系统键盘上,meta对应命令键 (⌘)。在Windows系统键盘meta对应windows徽标键(⊞)。在Sun操作系统键盘上,meta对应实心宝石键 (◆)。在其他特定键盘上,尤其在MIT和Lisp键盘及其后续,比如Knight键盘,space-cadet键盘,meta被标记为“META”。在Symbolics键盘上,meta被标记为“META” 或者 “Meta”。

********

可以通过全局 config.keyCodes 对象自定义按键修饰符别名:

// 可以使用 v-on:keyup.f1

Vue.config.keyCodes.f1 = 112

<!-- Alt + C -->

<input @keyup.alt.67="clear">

<!-- Ctrl + Click -->

<div @click.ctrl="doSomething">Do something</div>

三、checkbox

注意对比angular写法,选中与不选中直接对应的是显示还是隐藏我们的box,flag在默认的data中设置为false

<input type="checkbox" v-model="flag"/>

    <div class="box" v-if="flag">

        box

    </div>

四、select

对比angular写法http://www.runoob.com/angularjs/angularjs-select.html

data: {

        selected: 'C',

        options: [

            { text: 'One', value: 'A' },

            { text: 'Two', value: 'B' },

            { text: 'Three', value: 'C' }

        ]

    }

    <select v-model="selected">

    <option v-for="item in options" :value="item.value">

            {{item.text}}

    </option>

    </select><br/>

        选中:{{selected}}

五、radio

对比angular

使用四中的源数据

<ul>

        <li v-for="option in options">

<input type="radio" name="myRadio" :value="option.value"  v-model="selected"/>{{option.text}}

            </li>

        </ul><br/>

        <span>选择的是: {{ selected }}</span>

六、生命周期函数

对比react生命周期函数

初始化:

getDefaultProps:作用于组件类,只调用一次,返回对象用于设置默认的props,对于引用值,会在实例中共享。

getInitialState:作用于组件的实例,在实例创建时调用一次,用于初始化每个实例的state,此时可以访问this.props。

componentWillMount:在完成首次渲染之前调用,此时仍可以修改组件的state。

render

必选的方法,创建虚拟DOM,该方法具有特殊的规则:

只能通过this.props和this.state访问数据

可以返回null、false或任何React组件

只能出现一个顶级组件(不能返回数组)

不能改变组件的状态

不能修改DOM的输出

componentDidMount:真实的DOM被渲染出来后调用,在该方法中可通过this.getDOMNode()访问到真实的DOM元素。此时已可以使用其他类库来操作这个DOM。

运行时:

componentWillReceiveProps:组件接收到新的props时调用,并将其作为参数nextProps使用,此时可以更改组件props及state。

componentWillReceiveProps: function(nextProps) {

        if (nextProps.bool) {

            this.setState({

                bool: true

            });

        }

    }

shouldComponentUpdate:组件是否应当渲染新的props或state,返回false表示跳过后续的生命周期方法,通常不需要使用以避免出现bug。在出现应用的瓶颈时,可通过该方法进行适当的优化。

componentWillUpdate:接收到新的props或者state后,进行渲染之前调用,此时不允许更新props或state。

render

componentDidUpdate:完成渲染新的props或者state后调用,此时可以访问到新的DOM元素。

销毁:

componentWillUnmount:组件被移除之前被调用,可以用于做一些清理工作,在componentDidMount方法中添加的所有任务都需要在该方法中撤销,比如创建的定时器或添加的事件监听器。

参考API:http://cn.vuejs.org/v2/guide/instance.html#实例生命周期

每个 Vue 实例在被创建之前都要经过一系列的初始化过程。例如,实例需要配置数据观测(data observer)、编译模版、挂载实例到 DOM ,然后在数据变化时更新 DOM 。在这个过程中,实例也会调用一些 生命周期钩子 ,这就给我们提供了执行自定义逻辑的机会。

beforeCreate:实例刚刚被创建1

created:实例已经创建完成2

beforeMount:模板编译之前3

mounted:模板编译完成4------********请求数据放在这个里面  必须记住*****

beforeUpdate:数据更新之前

updated:数据更新完毕

beforeDestroy:实例销毁之前

destroyed:实例销毁完成    ----this.$destroy();销毁实例

{{msg}}

<input type="button" value="更新数据" @click="update()">

    <input type="button" value="销毁组件" @click="destroy">

  data:{

        msg:'welcome vue2.0'

    },

  methods:{   /*自定义方法*/

        update(){

            this.msg='大家好';

        },

        destroy(){

            this.$destroy();   /*销毁实例 组件*/

        }

    }

七、模拟百度搜索提示功能

1、监听文本框中的值

2、请求百度的接口

3、实现方法,watch监听文本框的输入变化,按键修饰符keyup实现

4、可以在表单的input 元素上使用v-model 指令来创建双向数据绑定。它会根据input元素的类型自动选取正确的绑定模式。

  // var api='https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+newValue;

<input type="text" v-model="search"/>

    <br/>

    <ul>

        <li v-for="item in list">

            {{item}}

        </li>

    </ul>

方法一watch:

引入<script src="https://cdn.jsdelivr.net/vue.resource/1.0.3/vue-resource.min.js"></script>

data:{

            search:'',

            list:[]

        }

        var timer='';

        vm.$watch('search',function(newValue){

        console.log(newValue);

        clearTimeout(timer);

        var _that=this;

        timer=setTimeout(function(){

            //去服务器请求数据

            var api='https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+newValue;

            _that.$http.jsonp(api,{

                jsonp:'cb'  /*改变回调函数*/

            }).then(function(data){

                console.log(data.body.s);

                _that.list=data.body.s;   /*改变data绑定的值*/

            })

        },200);

    })

 方法二:键盘事件  @keyup

<input type="text" v-model="search" @keyup="requestData()"/>

          data:{

            search:'',

            list:[],

            timer:''

        },

        methods:{

            requestData:function(){

                var api='https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+this.search;

                var _that=this;

                clearTimeout(this.timer);  /*清除定时器*/

                this.timer=setTimeout(function(){

                    //去服务器请求数据

                    _that.$http.jsonp(api,{

                        jsonp:'cb'  /*改变回调函数*/

                    }).then(function(data){

                        console.log(data.body.s);

                        _that.list=data.body.s;   /*改变data绑定的值*/

                    })

                },200)

            }

        }

vue学习笔记(一)关于事件冒泡和键盘事件 以及与Angular的区别的更多相关文章

  1. 关于事件冒泡和键盘事件 以及与Angular的区别

    一.事件冒泡 方法一.使用event.cancelBubble = true来组织冒泡 <div @click="show2()"> <input type=&q ...

  2. vue学习笔记(四)事件处理器

    前言 在上一章vue学习笔记(三)class和style绑定的内容中,我们学习了如何在vue中绑定class和style,介绍了常用的绑定方法,class的数组绑定和对象绑定以及style的数组绑定和 ...

  3. Vue学习笔记-Vue.js-2.X 学习(一)===&gt;基本知识学习

    一  使用环境: windows 7 64位操作系统 二  IDE:VSCode/PyCharm 三  Vue.js官网: https://cn.vuejs.org/ 四  下载安装引用 方式1:直接 ...

  4. Vue学习笔记-1

    前言 本文不是Vue.js的教程,只是一边看官网Vue的教程文档一边记录并总结学习过程中遇到的一些问题和思考的笔记. 1.vue和avalon一样,都不支持VM初始时不存在的属性 而在Angular里 ...

  5. vue 学习笔记(二)

    最近公司赶项目,一直也没时间看 vue,之前看下的都快忘得差不多了.哈哈哈,来一起回顾一下vue 学习笔记(一)后,继续向下看嘛. #表单输入绑定 基础用法 v-model 会忽略所有表单元素的 va ...

  6. vue学习笔记(八)组件校验&amp;通信

    前言 在上一章博客的内容中vue学习笔记(七)组件我们初步的认识了组件,并学会了如何定义局部组件和全局组件,上一篇内容仅仅只是对组件一个简单的入门,并没有深入的了解组件当中的其它机制,本篇博客将会带大 ...

  7. vue学习笔记(九)vue-cli中的组件通信

    前言 在上一篇博客vue学习笔记(八)组件校验&通信中,我们学会了vue中组件的校验和父组件向子组件传递信息以及子组件通知父组件(父子组件通信),上一篇博客也提到那是对组件内容的刚刚开始,而本 ...

  8. vue学习笔记(十)路由

    前言 在上一篇博客vue学习笔记(九)vue-cli中的组件通信内容中,我们学习组件通信的相关内容和进行了一些组件通信的小练习,相信大家已经掌握了vue-cli中的组件通信,而本篇博客将会带你更上一层 ...

  9. vue学习笔记(六)表单输入绑定

    前言 在上一章vue学习笔记(四)事件处理器这一篇博客的内容中,我们已经了解vue是如何绑定事件的,而本篇博客主要讲解的是vue中表单输入的绑定,通常我们自己提交信息的时候都是通过表单将信息到服务器的 ...

随机推荐

  1. AngularJs之六(服务)

    服务:AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用.AngularJS 内建了30 多个服务. 最常用的服务:$location  服务,  $http 服务 ...

  2. Angularjs CURD

    前言 基于一个手机端的项目使用了angularjs,硬着头皮去用,有很多的疑问还需要一一去验证,刚开始总是感觉找不到北,总是感觉有很多概念,而且似乎ng既夹杂MVC又夹杂MVVM的思想, 忙里偷闲敲了 ...

  3. svn忽略某个文件提交

    svn忽略配置文件提交:TortoiseSVN->Unversion and add to ignore_list (config.php(recursiverly)) 正如官方指南所言:Tor ...

  4. hdu 1040 As Easy As A+B

    As Easy As A+B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  5. PHP请求第三方接口的函数

    <?php public function HttpGet($url){ $curl = curl_init (); curl_setopt ( $curl, CURLOPT_URL, $url ...

  6. 无线连接手机进行Android测试

    当每天走到哪都要拿一根数据线进行项目测试的时候,总是有一些焦急和烦躁的,如果能够无线连接测试就在好不过了. 这样不再是什么难事了,只需要几步走: 在进行无线连接测试的过程中,你的手机必须root了,这 ...

  7. for循环语句/命名函数

    for(1.表达式1;2.表达式2;3.表达式3){ 4.循环体语句; } 先执行1,在执行2表达式,如果2的表达式为false的话直接退出循环, 如果2的表达式结果为true,执行4,执行3,执行2 ...

  8. javascript中关于value的一个小知识点(value既是属性也是变量)

    今天在学习input的value值时,发现这么一个小知识点,以前理解不太透彻 [1]以下这种情况是常见情况,会弹出“测试内容” <input type="button" va ...

  9. thymeleaf th:href 多个参数传递格式

    今天在使用thymeleaf的th:href传递多个参数的时候困惑了.然后百度了一下,发现没有人注释说明怎么弄,然后自己google了一下,现在就标记一下,方便记录一下. th:href=" ...

  10. mybatis后台中传参到sql语句中,使用@Param注解