美文网首页
Vue 基础学习

Vue 基础学习

作者: 未来在奋斗 | 来源:发表于2019-11-24 21:08 被阅读0次

    Vue 的构建

    const app = new vue({
    //用于挂载要管理的元素
       el:"#app",
      data:{//构造数据
              name:'老王',
                age:'50'
          },
    methods:{//构造方法
              add(){
    
                   },
         sub(){
                    }
              }
          filters :{//定义过滤器
              showPrice(price){
                  return "¥" + price.toFixed(2);
                  }
         },
    computed: {//计算属性,最主要的是比函数构造方法多看缓存,在执行计算时性能更好
            reverseMsg() {
              console.log('computed')
              return this.msg.split('').reverse().join('')
            }
          },
    watch:{ //监听属性
            // key: value
            // key - 要监听的数据的名字
            // value - 是监听的数据发生变化之后,会触发的函数,这个函数会自动接受到2个参数
            //          newVal 新数据, oldVal旧数据
    
            firstName (newVal, oldVal) {
              console.log(newVal, oldVal)
              this.fullName = `${newVal} ${this.lastName}`
            },
    
            lastName (newVal, oldVal) {
              this.fullName = `${this.firstName} ${newVal}`
            },
             {        //深度监听的方法 handler
                handler(newVal, oldVal) {
                  console.log('obj修改了')
                },
    
                deep: true,//深度监听
      //强行默认执行一次
                immediate: true
              }
          },
    components:{//组件构造器
              cpn:{//注册组件
              template :`
                <div>张三</div>
                <div>李四</div>`
                  }
          }
        
    })
    

    基础语法

    //1. 监听事件
    v-on:click='aa';
    //2. 让标签中的内容不随着变量的改变而改变
    v-once
    // 3. 解析标签中的url
    v-html
    // 4. 把标签中的东西原封不动的展示不解析
    v-pre
    // 5. 蒙板,在vue解析之前存在,在vue解析之后消失
    v-cloak
    // 6. 绑定属性,在绑定的对象中如:老王:true/false会根据布尔值来决定是否显示
    v-bind
    // 7. 在vue解析之前会存在,在vue解析之后会消失
    v-cloak
    

    语法糖

    v-on;的语法糖 @;
    v-bind; 的语法糖 : 
    
    

    修饰符

    v-on
    @click.stop阻止冒泡
    @click.prevent阻止默认事件
    @keyup.enter键盘事件监听
    
    v-model
    1. lazy    v-model.lazy//失去焦点或者回车的时候更新
    2. number  v-model.number//转化为数字类型
    3. trim   v-model.trim//去除空格
    
    

    class 与 style

      <div id="app">
            <!-- id只能有一个后面的覆盖前面的 -->
            <p v-bind:id="msg" id="box" >我是一个屁</p>
            <!-- class可以多个存在 -->
            <p class="box" :class="msg">我是一个屁</p>
            <!-- style也能有多个存在 -->
            <p style="color: red;" :style="myStyle">我是一个屁</p>
            <hr>
    
      <!-- 
          二、class 与 style 可以提供 对象的写法
         -->
    
        <!-- key - class 类名,value - 控制这个类名是否要存在的条件 为true 就存在-->
        <p :class="{'box': msg, 'box1': !msg}">我是一个屁</p>
        <p :style="{ 'fontSize': number + 'px', 'color': color }">我是一个屁</p>
         <hr>
           <!-- 
          三、class 与 style 可以提供 数组的写法
         -->
    
         <p :class="[msg, 'box', {'box1': msg}]">我是一个屁</p>
         <p :style="[myStyle,{'fontWeight': 'bold'}]">我是一个屁</p>
     
        </div>
    

    if 判断

    v-if ='true' //条件判断 true显示 false 不显示
    v-else // v-if  的false执行
    v-else-if
      //if后面直接跟表达式
        <p v-if="fenshu >= 90">优</p>
        <p v-else-if="fenshu >= 80">良</p>
        <p v-else>差</p>
    
    用法和js中发if else 一样
    

    label 与 input 中的value复用问题,愿意是虚拟DOM

    不想复用就用不同的key值要复用就用相同的key值

    <label for="add">用户名</label>
        <input type="text" id="add" key="add">
        <label for="bdd">用户名</label>
        <input type="text" id="bdd" key="add">
    

    v-if 与 v-show 的区别

    v-if 不显示是被删除了 标签删除掉了
    v-show 不显示是因为隐藏 ,true显示 false 隐藏

    遍历数组

    v-for//变量数组
    v-for='item in Array'//item 遍历的每个元素
    v-for = '(item, index)  in Array' //index下标值 
    

    遍历对象

    //遍历对象,item表示每个元素的value值
    v-for ="item in obj"
    v-for = '(value,key) in obj'
    v-for = '(value,key,index) in obj'
    

    遍历数字

    <!-- 数字 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]-->
        <ul>
          <li v-for="(item, index) in 10">
            {{ item }} - {{ index }}
          </li>
        </ul>
    1 - 0
    2 - 1
    3 - 2
    4 - 3
    5 - 4
    6 - 5
    7 - 6
    8 - 7
    9 - 8
    10 - 9
    

    数组的更新检测

    1. 数组的变异方法
      1. push() 尾部增加
      2. pop() 尾部删除
      3. unshift() 头部增加
      4. shift() 头部删除
      5. splice() 数组高级的一些方法
      6. sort() 排序
      7. reverse() 反装

    但是:

    1. 通过数组的下标去操作修改的话,页面将不会更新
    2. 直接修改数组的长度, 页面也不会更新
      如果解决:
      第一种
    3. Vue.set(需要修改的数组, 下标, 修改为什么值)
    4. vm.$set(需要修改的数组, 下标, 修改为什么值)
      第二种
      vm.list.splice(1)

    对象的更新检测

    问题
    对一个对象添加一个之前不存在的属性的时候,页面不更新

    Vue.set(需要修改的对象,key, value)
    vm.$set(需要修改的对象,key, value)

    v-model 双向绑定

    在input 输入框改变的时候变量add也会改变,变量add改变式input的value也改变

     <input type="text"  v-model="add">
      <h2>{{add}}</h2>
     v-model结合radio使用 radio单选框 input type:radio name一样只能选一个
    

    v-model结合 checkbox使用

        <label for="ap">
       <input type="checkbox" id="ap" v-model="isadd">
        </label>
                    <h2>{{isadd}}</h2>
    
    在选择的时候h2打印选择的
    

    <style>
     .active{
         background: red;
     }
    </style>
    <body>
        <div id="app">   
            {{msg}}
            <!-- v-model 是双向绑定,显示数据会更改,data中数据也会更改 -->
            <input type="text" v-model="msg">
            <!-- 在v-bind指令绑定下属性也可以使用data值 -->
            <p :title="msg">你是一个屁</p>
            <ul>
                <!-- item 是数组中的每个元素 v-for指令是遍历 -->
                <li v-for="item in list">{{item}}</li>
            </ul>
            <!-- v-if 判断 v-else v-else-if 用发和原生一样的 值为true显示 false删除 -->
            <button v-if="isLogin" @click="isLogin = !isLogin">退出登录</button>
            <button v-else @click="isLogin = !isLogin ">登录</button>
    
    
        <br/>
            <button 
            :class="{'active':curTab === 'home'}"
            @click="fn('home')"
            >首页</button>
            <button
             :class="{'active':curTab === 'list'}"
             @click="fn('list')"
             >列表页</button>
            <button 
            :class="{'active':curTab === 'about'}"
            @click="fn('about')"
            >详情页</button>
        <hr>
            <div v-if="curTab ==='home' ">
                首页内容
            </div>
            <div  v-if="curTab ==='list' ">
                列表页内容
            </div>
            <div  v-if="curTab ==='about' ">
                详情页内容
            </div>
        </div>
        <script src="./js/vue.js"></script>
        <script>
         const vm = new Vue({
            el:'#app',
            data:{
                msg:'hello',
                list:['老王','老李','老张','老宋'],
                isLogin: true,
                curTab :'home'
            },
            methods:{
               fn(str){
                   this.curTab = str;
               }
            }
    
    
         });
        </script>
    
    
    

    相关文章

      网友评论

          本文标题:Vue 基础学习

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