vue3API

.全新的全局API
● createApp()
● defineProperty()
● defineAsyncComponent()
● nextTick()
2.将原来的全局API转移到应用对象
● app.component()
● app.config()
● app.directive()
● app.mount()
● app.unmount()
● app.use()
3.模板语法变化
● v-model的本质变化
○ prop:value -> modelValue;
○ event:input -> update:modelValue;
● .sync修改符已移除, 由v-model代替
● v-if优先v-for解析

案例

<template>
    <div>
      事件:<input type="text" v-model="todo">
      <button @click="addList()"> 添加 </button>
      <ul>
        <li>  {{msg}} </li>
        <li v-for="(item,index) in todoList" @mouseenter="showDelete(true)" @mouseleave="showDelete(false)" :key="index" :class="item.isFinished? 'finished':''">
          <input type="checkbox" :checked="item.isFinished" @click="toFinish(index)">
          {{item.content}}

          <button v-show="isShow" @click="deleteList(index)"> 删除 </button>
        </li>
      </ul>
      <div> 已经完成{{num}}件/总共{{todoList.length}}件 </div>
    </div>
</template>

<script>
import {defineComponent,ref} from "vue";
import {computed, reactive} from "@vue/reactivity";

export default  defineComponent ({
  name: "Todo",
  setup:()=>{
    let isShow = ref(false)
    let todo = ref('123')
    let msg = ref('hello')
    let todoList = reactive([
      {id:1,content:'111',isFinished:false},
      {id:2,content:'222',isFinished:true},
      {id:3,content:'333',isFinished:false},
    ])

    //计算属性
    let num =computed({
      get(){
        return todoList.filter((item)=>{
          return item.isFinished
        }).length
      },
    })

    //添加事件
    function addList(){
      console.log(this)
      console.log(msg)
      this.msg = 'word'
      msg.value = 'word'

      todoList.push({
        id:new Date(),
        content:todo.value,
        isFinished:false
      })

    }
    //删除事件
    function deleteList(index){
      todoList.splice(index,1)
    }

    //完成事件
    function toFinish(index){
      console.log(todoList)
      console.log(index)
      todoList[index].isFinished = !todoList[index].isFinished
    }


    function showDelete(flag){
      console.log(flag)
      if(flag){
        isShow.value = true
      }else{
        isShow.value = false
      }

    }


    return {
      msg,
      todoList,
      addList,
      todo,
      deleteList,
      toFinish,
      num,
      showDelete,
      isShow
    }
  },
})
</script>

<style lang="less" scoped>

li{
  list-style: none;
  border: 1px solid red;
}
.finished{
  text-decoration: line-through ;
}

</style>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值