不二如是 发表于 2018-9-13 15:42:56

017 V @click监听+$event

本帖最后由 不二如是 于 2018-9-13 17:02 编辑

https://xxx.ilovefishc.com/forum/201808/24/170823gj1tj61c4apj6o1e.jpg

上一讲我们搞定了操控数组,本次来学习一个监听事件。

在指令+事件+语法糖我们已经引入了用于处理Vue事件的v-on。

在事件绑定上,类似原生JS的onclick写法,用在HTML监听。

例如,我们监听一个按钮的单击事件,设置计数器,每次单击,目标元素就+1。

创建div:
<div id="myApp">
    请疯狂的点:{{counter}}
    <button @click="counter++">爱我就请点我!</button>
</div>

创建Vue实例:
<script>
    var app = new Vue({
      el:"#myApp",
      data:{
            counter:0
      }
    })
</script>


如果实现上面的效果,我们需要使用JS并且动态修改DOM。

而在Vue中一个双向绑定就可以了。

@click的表达式可以直接使用JS,也可以直接在Vue实例的methods中的某个方法中。

继续修改,拓展一个按钮,单击一下+100,修改div:
<div id="myApp">
    请疯狂的点:{{counter}}
    <button @click="loveFishC()">+1</button>
    <button @click="loveFishC(100)">+100</button>
</div>

修改Vue实例:
<script>
    var app = new Vue({
      el:"#myApp",
      data:{
            counter:0
      },
      methods:{
            loveFishC:function(cnt){
                cnt = cnt || 1;
//                this指向当前的Vue实例app
                this.counter += cnt;
            }
      }
    })
</script>


在methods中我们定义了一个loveFishC的方法供@click调用。

这种在HTML元素上监听事件设计看似将DOM与JS紧耦合,违背了分离的原理。

实际呢,恰恰相反!

通过HTML元素就可以知道调用的是哪个方法,将逻辑与DOM解耦,更加便于维护。

当ViewModel销毁时,所有的事件处理器都会自动销毁,不用手动清理。

Vue还提供了一个$event,用于访问原生DOM事件。

例如我们可以组织一个超链接的打开,创建div:
<div id="myApp">
    <a href="https://ilovefishc.com/" @click="loveFishC('禁止打开哦',$event)">鱼C官网</a>
</div>

创建Vue实例:
<script>
    var app = new Vue({
      el:"#myApp",
      data:{
            counter:0
      },
      methods:{
            loveFishC:function(msg,event){
                event.preventDefault();
                window.alert(msg);
            }
      }
    })
</script>


通过window自带的event.preventDefault()方法来禁止URL的使用。

如果此事件没有需要显式处理,那么它默认的动作也不要做(因为默认是要做的)。




课后作业


1、v-on:click的简写(语法糖)是?

2、在HTML元素通过DOM与JS紧耦合来监听事件是否破坏分离原理?

3、$event不可以用来访问原生的DOM事件(T/F)



答案:
**** Hidden Message *****



如果有收获,别忘了评分{:10_281:} :

http://xxx.fishc.com/forum/201709/19/094516hku92k2g4kefz8ms.gif

这位鱼油,如果喜欢Vue,请订阅 专辑(传送门)(不喜欢更要订阅{:10_297:} )

http://xxx.fishc.com/forum/201803/21/151715umqz1qoywp11wjbq.gif

lbjstudypython 发表于 2018-11-27 16:38:59

1.@click
2.T
3.F

Ruide 发表于 2020-4-9 11:20:17

1.@
2.通过HTML元素绑定JS方法,将逻辑与DOM解耦,更加便于维护
3.F

优时风 发表于 2020-5-6 17:31:10

1

一笙彤 发表于 2020-6-20 14:16:29

0

suweixuan1998 发表于 2020-6-23 21:34:30

@click
否,将逻辑与DOM解耦,更加便于维护
F

HanYanShuang 发表于 2022-4-28 10:05:07

学习

jack6666 发表于 2022-11-1 20:41:27

1
页: [1]
查看完整版本: 017 V @click监听+$event