美文网首页
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