• Vue入门语法(一)


    重学Vue,原来Vue是基于模板做文章。

    对一个<div id="app"></div>根目录,配上一个HTML模板和一段js对象来控制该模板,显示到页面里。

    把这个学会,半天够了吧。跟React前的jQuery+模块化时代太像了,难怪上手快。

    一、v-xx系列

    v-xx系列就是Vue的语法规范。通过xxx定义,可以完成页面数据的展示,交互。跟模板

    当你有一个需求的时候,首先要想想用v系列动作的哪一个。下面逐一学习:

    1,最基础的

    v-if="seen"  seen是js对象中data的一个变量名。

    v-bind:href="url"  url是js对象中data的一个变量名。

    <input v-model="message">中的v-model:与js对象中data的一个变量名message,进行双向绑定

        v-model 指令用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值。

    v-on:click="doSomething"

    <form v-on:submit.prevent="onSubmit"></form> .prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()

    例子:

    (1)通过按钮click,使反转后的字符串写到message

    <div id="app">
        <p>{{ message }}</p>
        <button v-on:click="reverseMessage">反转字符串</button>
    </div>
        
    <script>
    new Vue({
      el: '#app',
      data: {
        message: 'Runoob!'
      },
      methods: {
        reverseMessage: function () {
          this.message = this.message.split('').reverse().join('')
        }
      }
    })
    </script>

    (2)通过CheckBox勾选,修改div的背景色

    <div id="app">
      <label for="r1">修改颜色</label><input type="checkbox" v-model="use" id="r1">
      <br><br>
      <div v-bind:class="{'class1': use}">
        v-bind:class 指令
      </div>
    </div>
        
    <script>
    new Vue({
        el: '#app',
      data:{
          use: false
      }
    });
    </script>

    v-else 、v-else-if 必须跟在 v-if 或者 v-else-if之后。可以与Handlebars互相取代。

    v-show:<h1 v-show="ok">Hello!</h1>  其中ok是js对象中data的一个变量名。可通过true和false来控制显示还是隐藏。

    2,v-for

    v-for 指令需要以 site in sites 形式的特殊语法, sites 是源数据数组并且 site 是数组元素迭代的别名。

    v-for 可以绑定数据到数组来渲染一个列表:

    <div id="app">
      <ol>
        <li v-for="site in sites">
          {{ site.name }}
        </li>
      </ol>
    </div>
     
    <script>
    new Vue({
      el: '#app',
      data: {
        sites: [
          { name: 'Runoob' },
          { name: 'Google' },
          { name: 'Taobao' }
        ]
      }
    })
    </script>

    v-for 迭代对象

    v-for 可以通过一个对象的属性来迭代数据:

    <div id="app">
      <ul>
        <li v-for="value in object">
        {{ value }}
        </li>
      </ul>
    </div>
     
    <script>
    new Vue({
      el: '#app',
      data: {
        object: {
          name: '菜鸟教程',
          url: 'http://www.runoob.com',
          slogan: '学的不仅是技术,更是梦想!'
        }
      }
    })
    </script>

    你也可以提供第二个的参数为键名:

    <div id="app">
      <ul>
        <li v-for="(value, key) in object">
        {{ key }} : {{ value }}
        </li>
      </ul>
    </div>

    第三个参数为索引:

    <div id="app">
      <ul>
        <li v-for="(value, key, index) in object">
         {{ index }}. {{ key }} : {{ value }}
        </li>
      </ul>
    </div>

    v-for 也可以循环整数,输出:1,2,3,4,5,6,7,8,9,10

    <div id="app">
      <ul>
        <li v-for="n in 10">
         {{ n }}
        </li>
      </ul>
    </div>

    二、js部分计算属性。getter和setter

    computed 属性默认只有 getter ,不过在需要时你也可以提供一个 setter :

    var vm = new Vue({
      el: '#app',
      data: {
        name: 'Google',
        url: 'http://www.google.com'
      },
      computed: {
        site: {
          // getter
          get: function () {
            return this.name + ' ' + this.url
          },
          // setter
          set: function (newValue) {
            var names = newValue.split(' ')
            this.name = names[0]
            this.url = names[names.length - 1]
          }
        }
      }
    })
    // 调用 setter, vm.name 和 vm.url 也会被对应更新
    vm.site = '菜鸟教程 http://www.runoob.com';
    document.write('name: ' + vm.name);
    document.write('<br>');
    document.write('url: ' + vm.url);

    三、监听属性

    Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化。

    以下实例通过使用 watch 实现计数器:

    <div id = "app">
        <p style = "font-size:25px;">计数器: {{ counter }}</p>
        <button @click = "counter++" style = "font-size:25px;">点我</button>
    </div>
    <script type = "text/javascript">
    var vm = new Vue({
        el: '#app',
        data: {
            counter: 1
        }
    });
    vm.$watch('counter', function(nval, oval) {
        alert('计数器值的变化 :' + oval + ' 变为 ' + nval + '!');
    });
    </script>

    nval,oval是watch方法的实现。

    以下实例进行千米与米之间的换算:

    <div id = "computed_props">
        千米 : <input type = "text" v-model = "kilometers">
        米 : <input type = "text" v-model = "meters">
    </div>
    <p id="info"></p>
    <script type = "text/javascript">
        var vm = new Vue({
        el: '#computed_props',
        data: {
            kilometers : 0,
            meters:0
        },
        methods: {
        },
        computed :{
        },
        watch : {
            kilometers:function(val) {
                this.kilometers = val;
                this.meters = this.kilometers * 1000
            },
            meters : function (val) {
                this.kilometers = val/ 1000;
                this.meters = val;
            }
        }
        });
        // $watch 是一个实例方法
        vm.$watch('kilometers', function (newValue, oldValue) {
        // 这个回调将在 vm.kilometers 改变后调用
        document.getElementById ("info").innerHTML = "修改前值为: " + oldValue + ",修改后值为: " + newValue;
    })
    </script>

    批注:温习v-model的含义,监听输入框,双向绑定。

    四、样式绑定

    这部分太简单,无非就是把样式作为js对象data中的变量,然后用一些逻辑觉得到底是显示还是隐藏,到底是样式a,还是样式b。

    https://www.runoob.com/vue2/vue-class-style.html

    五、事件处理器

    1,基本语法

    这部分比较有意思:在js对象写一个methods方法xx,关键看怎么调用,往往有两种方式

    (1)在v-on:click="xx"或v-on:click="xx('param1', 'param2')"

    注:xx可以是data: {xx: value, ...}的变量及其表达式(counter++),

    也可以是methods: { xx: function(){} }的方法名,还能带参数。

    神奇的语法。

    (2)app = new Vue({..., methods: { xx: function(){} });  直接调用 app.xx();

    2,事件修饰符
    Vue.js 为 v-on 提供了事件修饰符来处理 DOM 事件细节,如:event.preventDefault() 或 event.stopPropagation()。

    Vue.js 通过由点 . 表示的指令后缀来调用修饰符。

    .stop - 阻止冒泡
    .prevent - 阻止默认事件
    .capture - 阻止捕获
    .self - 只监听触发该元素的事件
    .once - 只触发一次
    .left - 左键事件
    .right - 右键事件
    .middle - 中间滚轮事件
    <!-- 阻止单击事件冒泡 -->
    <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>

    <!-- click 事件只能点击一次,2.1.4版本新增 -->
    <a v-on:click.once="doThis"></a>


    3,按键修饰符
    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
    实例

    <p><!-- Alt + C -->
    <input @keyup.alt.67="clear">
    <!-- Ctrl + Click -->
    <div @click.ctrl="doSomething">Do something</div>

  • 相关阅读:
    jsp表单数据添加到数据库
    javaweb 复习随笔
    [组 原]
    [组 原]
    均方差、交叉熵及公式推导
    网络安全知识网站
    docker搭建渗透环境并进行渗透测试
    SQL注入之-DECLARE时间盲注
    Apache Flink Dashboard未授权访问导致任意Jar包上传漏洞
    Dnscat2实现DNS隐蔽隧道反弹Shell
  • 原文地址:https://www.cnblogs.com/zccst/p/13909131.html
Copyright © 2020-2023  润新知