Vue学习笔记【4】——Vue指令之v-on

Vue指令之v-on

v-on指令介绍

  1. 直接使用指令v-on

  2. 使用简化指令@

  3. 绑定事件代码:@事件名="methods中的方法名称"

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <!-- Vue 中提供了 v-on: 事件绑定机制 -->
    <input type="button" value="按钮" v-on:click="alert('hello')"> 
    <input type="button" value="按钮" @click="show">
  </div>
  <script src="./lib/vue-2.4.0.js"></script>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        mytitle: '这是一个自己定义的title'
      },
      methods: { // 这个 methods属性中定义了当前Vue实例所有可用的方法
        show: function () {
          alert('Hello')
        }
      }
    })
    //原生js代码
    /* document.getElementById('btn').onclick = function(){
      alert('Hello')
    } */
  </script>
</body>
</html>

  

案例:跑马灯效果

实现步骤

第一步:导入Vue包

第二步:创建一个要控制的区域

第三步:定义一个vue实例

第四步:编写具体代码

代码分析
 一、让文字动起来
  1.给(唱起来~)按钮绑定一个点击事件 指令:v-on  @
  2.在按钮的事件处理函数中,写相关的业务逻辑代码:
  拿到msg字符串,然后对字符串进行操作,substring
  来进行对字符串的截取操作把第一个字符串截取,放到最后。
  3.为了实现点击一下按钮,自动截取的功能,需要把2中的代码
  放到一个定时器中去。
 二、让文字停止
  思路:利用setInterval返回的intervalID来停止定时器。但是
  由于外部的函数不能获取到setInterval函数中的数据,所以我们要把
  IntervalID的值获取后放入到data中。
  1.在data中定义一个变量来存放intervalID,初始默认值为null。
  2.为(停!)按钮绑定一个点击事件 指令:v-on  @
  遇到的问题:每点一次唱起来按钮,都会开启一个定时器,我们要在开
  启定时器之前做一个判断,如果intervalId不为null,说明已经开启了
  一个定时器,不必再新开启,如果intervalId为null,则开启定时器。
  3.判断intervalID是否为null时出现的问题:
      如果只写if(this.intervalId != null) return; 这一句,
  这种方法点击完唱起来按钮后再点击停止按钮会出现一个问题——唱起来按钮失效了,
  点击它文字不会再动起来,因为点击按钮后,虽然定时器被停止了,但是intervalId
  没有初始化回null,每次都会进入这个if语句,永远不能再开启定时器,因此,每次
   点击停止按钮后,都要吧this.intervalId重新赋值为null!
三、注意:
  ①在vm实例中,想要获取data上的数据,
  或者调用methods中的方法,必须通过this.属性名或this.方法名来访问,
  这里的this,就表示我们new出来的VM实例。
  ②VM实例会自动监听其data中所有数据的改变,一旦发生变化,立即更新,
  同步到页面中。程序员只需要关心数据,不需要考虑如何重新渲染页面。

代码实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <!-- 第一步:导入Vue包 -->
    <script src="./lib/vue-2.4.0.js"></script>
</head>
<body>
    <!-- 第二步:创建一个要控制的区域 -->
    <div id="app">
        <!-- 第四步:编写具体代码 -->
        <h4>{{ msg }}</h4>
        <input type="button" value="唱起来~" @click="sing">
        <input type="button" value="停!" @click="stop">
    </div>
    <!-- 第三步:定义一个vue实例-->
    <script>
      var vm = new Vue({
        el:'#app',
        data:{
            msg:'大山滴子孙~呦!~~~~~爱太阳~咯~~~~',
            intervalId:null //在data上定义intervalID
        },
        methods:{
            sing(){//es6写法
                if(this.intervalId != null) return; 
                // 使用es6语法中的箭头函数来写
                this.intervalId = setInterval(() => {
                //获取字符串开头的第一个字符
                var start = this.msg.substring(0,1)
                //获取字符串除开头第一个字符外的其他字符
                var end = this.msg.substring(1)
                //重新拼接得到新的字符串,并赋值给this.msg
                this.msg = end+start
                },400)                
                // 原来的写法
                // var _this = this
                // setInterval(function(){
                // //获取字符串开头的第一个字符
                // var start = this.msg.substring(0,1)
                // //获取字符串除开头第一个字符外的其他字符
                // var end = this.msg.substring(1)
                // //重新拼接得到新的字符串,并赋值给this.msg
                // this.msg = end+start
                // },400)   
            },
            stop(){//停止定时器
                clearInterval(this.intervalId)
                this.intervalId = null
            }
        }
    })  
    </script>  
</body>
</html>

  

猜你喜欢

转载自www.cnblogs.com/superjishere/p/11872984.html