美文网首页
前端扯犊子之四Vue2(一)

前端扯犊子之四Vue2(一)

作者: wsgdiv | 来源:发表于2021-05-17 07:45 被阅读0次

    一、概述

    1、安装:

    可npm可cdn可 script 标签本地引入

    2、指令集:

    v-cloak 去除闪动
    v-html 指令用于输出 html 代码
    v-bind 绑定,可以进行样式绑定【对象(可多个属性、绑定计算属性)、数组(传入多个class、三元表达式、使用对象)、用于组件、内联】
    v-on 指令用于监听 DOM 事件
    v-model 指令用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定
    v-if 将根据表达式的布尔值进行操作,如果属性值为 null 或 undefined,则该属性不会显示出来。可以用 v-else 指令给 v-if 添加一个 "else" 块,v-else-if 用作 v-if 的 else-if 块。可以链式的多次使用
    v-show 指令来根据条件展示元素
    v-for 可以绑定数据到数组来渲染一个列表,可以迭代对象、迭代整数,可以提供第二个的参数为键名,第三个参数为索引
    v-once 只渲染一次
    v-pre 跳出渲染
    v-text innerText输出

    3、缩写

    v-bind 语法糖为 :
    v-on 语法糖为 @

    4、简单例子:
    <div id="app">
      <p>{{ message }}</p>
    </div>
    
    <script>
    new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue.js!'
      }
    })
    </script>
    
    5、模板
    //src/APP.vue
    <!-- 展示模板 -->
    <template>
      <div id="app">
        <img src="./assets/logo.png">
        <hello></hello>
      </div>
    </template>
     
    <script>
    // 导入组件
    import Hello from './components/Hello'
     
    export default {
      name: 'app',
      components: {
        Hello
      }
    }
    </script>
    <!-- 样式代码 -->
    <style>
    #app {
      font-family: 'Avenir', Helvetica, Arial, sans-serif;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
      text-align: center;
      color: #2c3e50;
      margin-top: 60px;
    }
    </style>
    
    //接下来我们可以尝试修改下初始化的项目,将 Hello.vue 修改为以下代码:
    
    //src/components/Hello.vue
    <template>
      <div class="hello">
        <h1>{{ msg }}</h1>
      </div>
    </template>
     
    <script>
    export default {
      name: 'hello',
      data () {
        return {
          msg: '欢迎'
        }
      }
    }
    </script>
    

    二、过滤器

    三种形式:

    {{ message | capitalize }}
    {{ message | filterA | filterB }}
    {{ message | filterA('arg1', arg2) }}
    message 是第一个参数,字符串 'arg1' 作为第二个参数, arg2 表达式的值将被求值后作为第三个参数。
    简单例子:

    <div id="app">
      {{ message | capitalize }}
    </div>
        
    <script>
    new Vue({
      el: '#app',
      data: {
        message: 'runoob'
      },
      filters: {
        capitalize: function (value) {
          if (!value) return ''
          value = value.toString()
          return value.charAt(0).toUpperCase() + value.slice(1)
        }
      }
    })
    </script>
    

    三、methods方法

    <div id="vue_det">
            <h1>site : {{site}}</h1>
            <h1>url : {{url}}</h1>
            <h1>{{details()}}</h1>
        </div>
        <script type="text/javascript">
            var vm = new Vue({
                el: '#vue_det',
                data: {
                    site: "菜鸟教程",
                    url: "www.runoob.com",
                    alexa: "10000"
                },
                methods: {
                    details: function() {
                        return  this.site + " - 学的不仅是技术,更是梦想!";
                    }
                }
            })
        </script>
    

    methods方法里定义函数。

    四、计算属性 computed、监听属性 watch

    1、计算属性 computed

    与methods比较: computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。而使用 methods ,在重新渲染的时候,函数总会重新调用执行。

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

    2、监听属性 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-on用来监听

    1、事件修饰符

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

    .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 事件只能点击一次 -->
    <a v-on:click.once="doThis"></a>
    
    2、按键修饰符

    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

    六、表单

    1、类型:

    input
    textarea
    input type="checkbox" 单/复选框
    input type="radio" 单选按钮
    select 列表

    <div id="app">
      <select v-model="selected" name="fruit">
        <option value="">选择一个网站</option>
        <option value="www.runoob.com">Runoob</option>
        <option value="www.google.com">Google</option>
      </select>
     
      <div id="output">
          选择的网站是: {{selected}}
      </div>
    </div>
     
    <script>
    new Vue({
      el: '#app',
      data: {
        selected: '' 
      }
    })
    </script>
    
    2、修饰符

    input v-model.lazy="msg" 不再实时更新,在失焦和回车时更新
    input v-model.number="age" type="number" 将输入转为number
    input v-model.trim="msg" 自动过滤输入的首尾空格

    参考链接:
    https://www.runoob.com/vue2/vue-tutorial.html

    相关文章

      网友评论

          本文标题:前端扯犊子之四Vue2(一)

          本文链接:https://www.haomeiwen.com/subject/tcnwdltx.html