vue-01

作者: Grandperhaps | 来源:发表于2020-09-22 00:01 被阅读0次

    1. vue-'Hellow World'

    <div id="app">
    <div>{{msg}}</div>
    </div>
    <script type="text/javascript" src="js/vue.js"></script> 
    <script type="text/javascript">
    new Vue({
    el: '#app',
    data: {
    msg: 'HelloWorld' }
    })
    </script>
    
    • el: 元素的挂载位置(值可以是CSS选择器或者DOM元素)
    • data:模型数据(值是一个对象)

    2. v-cloak指令用法

    解决插值表达式村存在的问题:“闪动”
    1.提供样式

    [v-cloak]{
      display:none;
    }
    
    1. 在插值表达式所在的标签中添加v-cloak指令
      <div v-cloak>{{msg}}</div>

    背后的原理:先通过样式隐藏内容,然后在内存中进行值的替换,替换好之后再显示最终的结果。

    3. 数据绑定指令

    • v-text 填充纯文本

    ① 相比插值表达式更加简洁

    • v-html 填充HTML片段
      ① 存在安全问题
      ② 本网站内部数据可以使用,来自第三方的数据不可以用
    • v-pre 填充原始信息
      ① 显示原始信息,跳过编译过程(分析编译过程)

    4. 数据响应式

    数据的变化导致页面内容的变化

    • v-once 只编译一次
      显示内容之后不在具有响应式功能

    5.双向数据绑定

    v-model

    <input type='text' v-model='msg' />
    <div>{{mas}}</div>
    

    在input输入框更改内容会引起div中数据的变化
    +MVVM设计思想

    1. M(model)
    2. V(view)
    3. VM(View-Model)


      微信截图_20200920110106.png
    • 事件监听
    • 数据绑定

    6. 事件绑定

    1. 处理事件
    • v-on
    <input type=‘button' v-on:click='num++'/>
    
    • v-on简写
    <input type=‘button' @click='num++'/>
    
    1. 事件函数的调用方法
    • 直接绑定函数名称
    <button v-on:click='say'>Hello</button>
    
    • 调用函数
    <button v-on:click='say()'>Say hi</button>
    
    微信截图_20200920113336.png

    7. 事件参数传递

    1. 如果事件直接绑定函数名称,那么默认会传递事件对象作为事件函数的第一个参数
    2. 如果事件绑定函数调用,那么事件对象必须作为最后一个参数显示传递,并且事件对象的名称必须是$event
    <button v-on:click='handle1'>点击1</button>
    <button v-on:click='handle2(123, 456, $event)'>点击2</button>
    <script type="text/javascript">
            var vm = new Vue({
                el: '#app',
                data: {
                    num: 0
                },
                methods: {
                    handle1: function(event) {
                        console.log(event.target.innerHTML)//点击1
                    },
                    handle2: function(p, p1, event) {
                        console.log(p, p1) //123 456
                        console.log(event.target.innerHTML)//点击2
                        this.num++;
                    }
                }
            });
        </script>
    

    8. 事件修饰符

    • .stop阻止冒泡
    <a v-on:click.stop="handle">跳转</a>
    
    • prevent阻止默认行为
    <a v-on:click.prevent="handle">跳转</a>
    

    vue官网链接https://cn.vuejs.org/v2/api/#v-on

    9. 按键修饰符

    • .enter 回车键
    <input v-on:keyup.enter='submit'>
    
    • .delete 删除键
    <input v-on:keyup.delete='submit'>
    

    10. 自定义按键修饰符

    • 全局 config.keyCodes 对象
    Vue.config.keyCodes.f1 = 112
    
    //调用
    v-on:keyup.f1='handle()'
    

    11. v-bind

    动态处理属性

    • v-bind 指令用法
    <a v-bind:herf='url'>跳转</a>
    
    • 缩写形式
    <a  :herf='url'>缩写</a>
    
    • v-model的低层实现原理分析
    <input v-bind:value="msg" v-on:input="msg=$event.target.value">
    

    12. class样式处理

    • 对象语法
    
     <div id="app">
        <div v-bind:class="{active: isActive,error: isError}">
          测试样式
        </div>
        <button v-on:click='handle'>切换</button>
      </div>
    
    
     var vm = new Vue({
          el: '#app',
          data: {
            isActive: true,
            isError: true
          },
          methods: {
            handle: function(){
              // 控制isActive的值在true和false之间进行切换
              this.isActive = !this.isActive;
              this.isError = !this.isError;
            }
          }
        });
    
    
    
    • 数组语法
    <div id="app">
        <div v-bind:class='[activeClass, errorClass]'>测试样式</div>
        <button v-on:click='handle'>切换</button>
      </div>
    
    
    var vm = new Vue({
          el: '#app',
          data: {
            activeClass: 'active',
            errorClass: 'error'
          },
          methods: {
            handle: function(){
              this.activeClass = '';
              this.errorClass = '';
            }
          }
        });
    
    • 样式绑定相关语法细节
    1. 对象绑定和数组绑定可以结合使用
    <div v-bind:class='[activeClass, errorClass, {test: isTest}]'>测试样式</div>
    
    1. class绑定的值可以简化操作
    <div v-bind:class='arrClasses'></div>
    
    <div v-bind:class='objClasses'></div>
    
    arrClasses: ['active','error'],
    
    objClasses: {
              active: true,
              error: true
            }
    
    1. 默认的class会保留

    13. style样式处理

    • 对象语法
    <div v-bind:style="{ color: activeColor, fontSize: fontSize }"></div>
    
    • 数组语法
    <div v-bind:style="[baseStyles, overridingStyles]"></div>
    
    //1
    <div v-bind:style='{border: borderStyle, width: widthStyle, height: heightStyle}'></div>
    //2
    <div v-bind:style='objStyles'></div>
    //3
    <div v-bind:style='[objStyles, overrideStyles]'></div>
    
     var vm = new Vue({
          el: '#app',
          data: {
            borderStyle: '1px solid blue',
            widthStyle: '100px',
            heightStyle: '200px',
            objStyles: {
              border: '1px solid green',
              width: '200px',
              height: '100px'
            },     
             overrideStyles: {
              border: '5px solid orange',
              backgroundColor: 'blue'
            }
          },
        });
    

    14.分支循环解构

    1. 分支结构
    • v-if
    • v-else
    • v-else-if
    • v-show
    <div v-if='score>=90'>优秀</div>
        <div v-else-if='score<90&&score>=80'>良好</div>
        <div v-else-if='score<80&&score>60'>一般</div>
        <div v-else>比较差</div>
    
    1. v-if与v-show的区别
    • v-if控制元素是否渲染到页面
    • v-show控制元素是否显示(已经渲染到了页面)

    15. 循环结构

    • v-for遍历数组
    <li v-for='item in list'>{{item}}</li>
    
    <li v-for='(item,index) in list'>{{item}} + '---' +{{index}}</li>
    
    • key的作用:帮助Vue区分不同的元素,从而提高性能
    <li :key='item.id' v-for='(item,index) in list'>{{item}} + '---' {{index}}</li>
    
    <li :key='item.id' v-for='(item, index) in myFruits'>
            <span>{{item.ename}}</span>
            <span>-----</span>
            <span>{{item.cname}}</span>
          </li>
    
     var vm = new Vue({
          el: '#app',
          data: {
            fruits: ['apple', 'orange', 'banana'],
            myFruits: [{
              id: 1,
              ename: 'apple',
              cname: '苹果'
            },{
              id: 2,
              ename: 'orange',
              cname: '橘子'
            },{
              id: 3,
              ename: 'banana',
              cname: '香蕉'
            }]
          }
        });
    
    • v-for遍历对象
      <div v-for='(value, key, index) in object'></div>
    • v-if和v-for结合使用
      <div v-if='value==12' v-for='(value, key, index) in object'></div>
    <div id="app">
        <div v-if='v==13' v-for='(v,k,i) in obj'>{{v + '---' + k + '---' + i}}</div>
      </div>
    
    
    
    // 使用原生js遍历对象
        var obj = {
          uname: 'lisi',
          age: 12,
          gender: 'male'
        }
        for(var key in obj) {
          console.log(key, obj[key])
        }
        /*
          循环结构
        */
        var vm = new Vue({
          el: '#app',
          data: {
            obj: {
              uname: 'zhangsan',
              age: 13,
              gender: 'female'
            }
          }
        });
    ···
    
    
    
    

    相关文章

      网友评论

        本文标题:vue-01

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