Vue中基础API的使用

103 阅读1分钟

用v-bind给标签class设置动态的值

注意:

  • 可以和静态的class共存
  • 多个类名用数组存起来
  • 类名保存在vue变量中赋予给标签
  • 可以使用对象来对类名的添加,属性名是类名,属性值是布尔类型,为true就添加,为false就不添加
<template>
  <div>
    <p :class="type">薛之谦</p>
    <p :class="['red', 'f40']">天外来物</p>
    <p :class="{ red: true, blue: false }">迟迟</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      type: 'blue'
    }
  }
}
</script>

<style>
.f40 {
  font-size: 20px;
}
.red {
  color: red;
}
.blue {
  color: blue;
}
</style>

给标签动态设置style的值

注意:

  • 可以和静态的style共存
  • 样式中带-的属性写成小驼峰
<template>
  <div>
    <p :style="obj">薛之谦</p>
    <button @click="fn">设置随机颜色和大小</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      obj: {
        backgroundColor: 'skyblue',
        color: 'red',
        fontSize: '40px'
      }
    }
  },
  methods: {
    fn() {
      const fs = Math.random() * 100
      let str = '#'
      for (let i = 1; i <= 6; i++) {
        str += parseInt(Math.random() * 16).toString(16)
      }
      console.log(str)
      this.obj.color = str
      this.obj.fontSize = fs + 'px'
    }
  }
}
</script>

<style>
.f40 {
  font-size: 40px;
}
.red {
  color: red;
}
.blue {
  color: blue;
}
</style>

计算属性

在原数据的基础上计算得到一个新的值
注意:

  • 一定要有返回值return
  • 在模板里面,使用插值表达式
  • 调用的时候不要加小括号
  • 计算属性有缓存
  • 多次使用,只会调用一次
  <div id="app">
    <h3>{{msg.split('').reverse().join('')}}</h3>
    <h3>{{reverseMsg}}</h3>
  </div>
  <script src="./vue.js"></script>
  <script>
     {
      data () {
        return { msg: 'hi vue' }
      },
      computed: {
        reverseMsg () {
          return this.msg.split('').reverse().join('')
        }
      }
    })
  </script>

计算属性的完整写法

应用场景: 全选与单选

<template>
  <div>
    <span>全选:</span>
    <input type="checkbox" v-model="isCheckedAll" />
    <!-- 当点击反选按钮的时候,进行取反 -->
    <button @click="isCheckedAll = !isCheckedAll">反选</button>
    <ul>
      <li v-for="item in arr" :key="item.name">
        <input v-model="item.checked" type="checkbox" />
        <span>{{ item.name }}</span>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      arr: [
        {
          name: '猪八戒',
          checked: false
        },
        {
          name: '孙悟空',
          checked: true
        },
        {
          name: '唐僧',
          checked: false
        },
        {
          name: '白龙马',
          checked: false
        }
      ]
    }
  },
  computed: {
    isCheckedAll: {
      //   //是否全选
      //   return this.arr.every((item) => item.checked)

      //1. 当全选框的值被修改(要设置)的时候,要用到set,全选框的值修改,单选框的值也会被对应的进行修改,当点击全选框的时候,会得到一个值
      set(val) {
        console.log('val', val)
        this.arr.forEach((item) => (item.checked = val))
      },

      //2. 当单选全部选中的时候,全选框也会对应的进行选中,用到ES6的高级语法every
      get() {
        return this.arr.every((item) => item.checked)
      }
    }
  }
}
</script>

<style>
</style>

监听器的基本使用

作用:监听数据属性值的变化(data,computed等等),需要使用配置项watch

<template>
  <div><input type="text " v-model="name" />{{ name }}</div>
</template>

<script>
export default {
  data() {
    return {
      name: 'xzq'
    }
  },
  //监听器
  watch: {
    name(oldWal, newVal) {
      console.log(oldWal, newVal)
    }
  }
}
</script>

<style>
</style>

image.png

深度监听和立即执行

immediate 立即监听
deep 深度监听
handler 固定方法触发
语法如下:

watch: {
    "要监听的属性名": {
        immediate: true, // 立即执行
        deep: true, // 深度监听复杂类型内变化
        handler (newVal, oldVal) {
            
        }
    }
}

过滤器的使用

作用:把数据在展示前做格式转换
应用场景:日期格式的转换

<template>
  <div>
    <p>time:{{ time }}</p>
    <p>time:{{ time | fDate }}</p>
  </div>
</template>

<script>
import dayjs from 'dayjs'
export default {
  data() {
    return {
      time: new Date()
    }
  },
  filters: {
    fDate(value) {
      return dayjs(value).format('YYYY-MM-DD')
    }
  }
}
</script>

<style>
</style>

image.png