• Vue---$nextTick、$set、$ref、$event、$bus详细理解


    一、$nextTick

        不用$nextTick有时候会导致什么问题?

             导致执行的代码顺序不对,造成功能失败!

    我们要实现一个编辑功能,当我们单击编辑的时候,也要让编辑的文本框获取焦点

    1. handleEdit(todo){
    2. // todo.hasOwnProperty()判断身上有无什么属性
    3. if(todo.hasOwnProperty()){
    4. //有的话
    5. todo.isEdit= true
    6. }else{
    7. // 没有的话
    8. // todo.isEdit= true不能这么写 这么添加的isEdit的话 一会更改isEdit的时候,页面不会更改
    9. this.$set(todo,'isEdit',true) //这样写才被vue认可 上面那种做法不会有getter和setter
    10. }
    11. // 让我们编辑的那个输入框获取焦点
    12. // this.$refs.inputTitle.focus() 这样做显然是不行的 存在一个顺序问题
    13. // 走完if语句之后,vue并没有解析模板,而是顺着往下执行this.$refs.inputTitle.focus()
    14. // 但是因为没有解析模板 this.$refs.inputTitle.focus()并不能使已经隐藏的编辑框得到焦点
    15. // $nextTick所指定的回调会在DOM结点更新完毕之后再执行
    16. this.$nextTick(function(){
    17. this.$refs.inputTitle.focus()
    18. })
    19. },

    1. <template>
    2. <li>
    3. <label>
    4. <input type="checkbox" :checked="todo.done" @change="handleCheck(todo.id)"/>
    5. <span v-show="!todo.isEdit">{{todo.title}}span>
    6. <input type="text" v-show="todo.isEdit" :value="todo.title" @blur="handleBlur(todo,$event)"
    7. ref="inputTitle" />
    8. label>
    9. <button class="btn btn-danger" @click="handleDelete(todo.id)" >删除button>
    10. <button class="btn btn-edit" v-show="!todo.isEdit" @click="handleEdit(todo)">编辑button>
    11. li>
    12. template>

    二、$set

    这是全局 Vue.set 的别名。

    http://t.csdn.cn/OUoPw

    下面这个是另一个好人整理的

    http://t.csdn.cn/lHA2K

    三、$ref

    http://t.csdn.cn/j836G

    四、$event

    vue中点击事件或者是其他的事件可以通过在事件中添加$event进行对标签元素的dom获取或者修改标签指的属性等等。

    $event是指当前触发的是什么事件(鼠标事件,键盘事件等)

    $event.target则指的是事件触发的目标,即哪一个元素触发了事件,这将直接获取该dom元素

     

    showInfo1 函数 虽然调用的时候没有传入参数,但是我们在方法中依然可以使用

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="UTF-8">
    5. <title> 初识vuetitle>
    6. <script type="text/javascript" src="../js/vue.js">script>
    7. head>
    8. <body>
    9. <div id="root">
    10. <h2>欢迎来到{{name}}学习h2>
    11. <button v-on:click="showInfo1">点我提示信息1(不传参)button>
    12. <button @click="showInfo2($event,66)">点我提示信息2(传参)button>
    13. div>
    14. <script type="text/javascript">
    15. //阻止vue在启动时生成生产提示
    16. Vue.config.productionTip=false
    17. new Vue({
    18. el:'#root',
    19. data:{
    20. name:'尚硅谷'
    21. },
    22. methods:{
    23. showInfo1(event){
    24. // 打印标签中的文字
    25. console.log(event.target.innerText)
    26. alert('同学你好!')
    27. },
    28. showInfo2(event,number){
    29. console.log(event,number)
    30. alert('同学你好!!')
    31. }
    32. }
    33. })
    34. script>
    35. body>
    36. html>

    五、$bus

    首先说明Vue官方并没有为我们提供这个API,这个只是在开发中总结出来的经验

    Vue.prototype.$bus

    http://t.csdn.cn/w5n1u

  • 相关阅读:
    面经总结 (一)
    LeetCode(力扣)77. 组合Python
    Python Selenium 之数据驱动测试的实现!
    中医对于帕金森病的病因和症状有何解释?
    在Uni-app中实现计时器效果
    LC39.组合总和
    React源码分析8-状态更新的优先级机制
    精益生产之MES制造执行系统
    这些 JavaScript 笔试题你能答对几道?
    插入排序图解
  • 原文地址:https://blog.csdn.net/weixin_51351637/article/details/126857057