首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue官方文档笔记(二)

Vue官方文档笔记(二)

作者头像
tandaxia
发布于 2019-10-10 09:36:51
发布于 2019-10-10 09:36:51
64600
代码可运行
举报
文章被收录于专栏:谈补锅谈补锅
运行总次数:0
代码可运行

23、$refs是什么东东?

  通过在标签上设置ref属性,然后在Vue实例方法中可以通过$refs拿到这些标签,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input ref="input">
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
methods: {
  focus: function () {
    //拿到文本框标签,调用其获取焦点方法
    this.$refs.input.focus()
  }
}

24、对于多级嵌套组件,后代组件如何拿到父级或祖父级,设置更高级别的组件的数据或方法?

  使用依赖注入

      provide选项允许我们在当前组件指定我们想要提供给后代组件的数据/方法,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
provide: function () {
  return {
    getMap: this.getMap
  }
}

  然后在任何后代组件里,我们都可以使用inject 选项来接收指定的我们想要添加在这个实例上的属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
inject: ['getMap']

  实际上,可以把依赖注入看做是一部分”大范围有效的prop", 但是这个依赖注入祖先组件不需要知道哪些后代组件使用它提供的属性,同时后代组件不需要知道被注入的属性来自哪一级祖先组件。

25、对于某些我们创建的对象,如何程序化的清理?

程序化事件侦听器

  • 通过$on(eventName, eventHandler) 侦听一个事件
  • 通过$once(eventName, eventHandler) 一次性侦听一个事件
  • 通过$off(eventName, eventHandler) 停止侦听一个事件

    先看一个示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mounted: function () {
    //Pikaday是一个第三方日期选择器的库。这里是将这个日期选择器附加到一个输入框上,最后挂载到DOM上
  var picker = new Pikaday({
    field: this.$refs.input,
    format: 'YYYY-MM-DD'
  })

    //设置一次性的侦听事件,在组件销毁之前,销毁这个日期选择器
  this.$once('hook:beforeDestroy', function () {
    picker.destroy()
  })
}

  对于多个这种输入框,可以让多个输入框使用不同的Pikady, 每个新的实例都程序化地在后期清理它自己

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mounted: function () {
  this.attachDatepicker('startDateInput')
  this.attachDatepicker('endDateInput')
},
methods: {
  attachDatepicker: function (refName) {
    var picker = new Pikaday({
      field: this.$refs[refName],
      format: 'YYYY-MM-DD'
    })

    this.$once('hook:beforeDestroy', function () {
      picker.destroy()
    })
  }
}

26、如果组件之间出现了互相引用,如何处理?

       先看一个示例:

     组件<tree-foler>的模板是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<p>
  <span>{{ folder.name }}</span>
  <tree-folder-contents :children="folder.children"/>
</p>

    另外一个组件<tree-folder-contents>的模板是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ul>
  <li v-for="child in children">
    <tree-folder v-if="child.children" :folder="child"/>
    <span v-else>{{ child.name }}</span>
  </li>
</ul>

  这两个组件互相引用,导致出现了循环引用。这种情况如何去解决呢?

  假设这两个组件<tree-folder>是父组件,<tree-folder-contents>是子组件,则产生问题的是子组件<tree-folder-contents>, 因此我们在生命周期钩子beforeCreate里面去注册子组件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
beforeCreate: function () {
  this.$options.components.TreeFolderContents = require('./tree-folder-contents.vue').default
}

  或者,在本地注册组件的时候,我们使用webpack的异步import:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
components: {
  TreeFolderContents: () => import('./tree-folder-contents.vue')
}

  这样问题就解决了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
vue之组件边界情况处理
在绝大多数情况下,我们最好不要触达另一个组件实例内部或手动操作 DOM 元素。不过也确实在一些情况下做这些事情是合适的。
山行AI
2019/08/05
1.2K0
包学会之浅入浅出Vue.js:结业篇
本篇我们会详细分析下如何完成由多个组件组成一个复用组件的开发流程。
蔡述雄
2018/01/15
11.8K15
包学会之浅入浅出Vue.js:结业篇
京东前端二面必会vue面试题(持续更新中)_2023-02-24
Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载 等⼀系列过程,称这是Vue的⽣命周期。
用户10377014
2023/02/24
9400
一面高频vue面试题
eventBus事件总线适用于父子组件、非父子组件等之间的通信,使用步骤如下: (1)创建事件中心管理组件之间的通信
bb_xiaxia1998
2022/10/28
8580
最新的一波Vue实战技巧,不用则已,一用惊人
在Vue中,不同的选项有不同的合并策略,比如 data,props,methods是同名属性覆盖合并,其他直接合并,而生命周期钩子函数则是将同名的函数放到一个数组中,在调用的时候依次调用
不会飞的小鸟
2020/06/28
1K0
【初级】个人分享Vue前端开发教程笔记
每天学习编程,让你离梦想更新一步,感谢不负每一份热爱编程的程序员,不论知识点多么奇葩,和我一起,让那一颗四处流荡的心定下来,一直走下去,加油,2021加油!
达达前端
2021/02/04
5K0
vue中组件间通信方式的总结
这是我们比较熟悉的方式,主要是父子组件之间的传递方式,父传子使用props,子传父使用$emit.
用户9914333
2022/07/22
5270
腾讯二面vue面试题总结
对象内部通过 defineReactive 方法,使用 Object.defineProperty 来劫持各个属性的 setter、getter(只会劫持已经存在的属性),数组则是通过重写数组7个方法来实现。当页面使用对应属性时,每个属性都拥有自己的 dep 属性,存放他所依赖的 watcher(依赖收集),当属性变化后会通知自己对应的 watcher 去更新(派发更新)
bb_xiaxia1998
2022/11/18
7940
vue部分知识点
作用机理,v-if控制的是元素是否渲染,而v-show控制css的display属性,故频繁改变现隐状态使用v-show可以减少消耗
kif
2023/03/10
1.3K0
Vue 开发必须知道的 36 个技巧【近1W字】
Vue 3.x 的Pre-Alpha 版本。后面应该还会有 Alpha、Beta 等版本,预计至少要等到 2020 年第一季度才有可能发布 3.0 正式版; 所以应该趁还没出来加紧打好 Vue2.x 的基础; Vue基本用法很容易上手,但是有很多优化的写法你就不一定知道了,本文从列举了 36 个 vue 开发技巧; 后续 Vue 3.x 出来后持续更新.
火狼1
2019/10/09
1.3K0
Vue 2.X 文档阅读笔记二 (深入组件)
官方推荐使用写法1来定义全局注册组件命名,以避免可能出现的与HTML元素相冲突的情况。
前端_AWhile
2019/08/30
1.6K0
Vue学习笔记(二)
单页面应用程序 SPA,指的是一个 Web 网站中只有唯一一个 HTML 页面,所有的功能和交互都在这个唯一的页面内完成。
赤蓝紫
2023/01/01
2.4K0
Vue学习笔记(二)
Vue传值与状态管理总结
使用prop使得父子组件形成一个单向下行绑定:一般情况下,父级prop的更新会流动到子组件中,但是反过来则不行;
前端老道
2022/03/29
2.3K0
熬夜整理的vue面试题
vue-router 有 3 种路由模式:hash、history、abstract,对应的源码如下所示
bb_xiaxia1998
2022/11/16
8330
Vue 组件间通信的几种方式
Vue 遵循单向数据流的原则,状态会从父组件传递给子组件,避免子组件意外改变父组件状态导致的混乱逻辑。
前端西瓜哥
2022/12/21
2K0
Vue.js的组件、组件间通信
props定义了这个组件有哪些可配置的属性,props最好用对象的写法,这样可以针对每个属性设置类型、默认值或自定义校验属性的值。
用户3258338
2020/05/22
10.4K0
超全的Vue3文档【Vue2迁移Vue3】
链接:https://juejin.cn/post/6858558735695937544#heading-153
小丑同学
2021/03/25
2.9K0
Vue中组件间通信的方式
这种组件通信的方式是我们运用的非常多的一种,props以单向数据流的形式可以很好的完成父子组件的通信,所谓单向数据流,就是数据只能通过props由父组件流向子组件,而子组件并不能通过修改props传过来的数据修改父组件的相应状态,所有的prop都使得其父子prop之间形成了一个单向下行绑定,父级prop的更新会向下流动到子组件中,但是反过来则不行,这样会防止从子组件意外改变父级组件的状态,导致难以理解数据的流向而提高了项目维护难度。实际上如果传入一个基本数据类型给子组件,在子组件中修改这个值的话Vue中会出现警告,如果对于子组件传入一个引用类型的对象的话,在子组件中修改是不会出现任何提示的,这两种情况都属于改变了父子组件的单向数据流,是不符合可维护的设计方式的。 正因为这个特性,而我们会有需要更改父组件值的需求,就有了对应的emit,当我们在组件上定义了自定义事件,事件就可以由vm.emit触发,回调函数会接收所有传入事件触发函数的额外参数,
WindRunnerMax
2021/02/02
3.1K0
vuejs组件通信精髓归纳
父子关系即是组件 A 在它的模板中使用了组件 B,那么组件 A 就是父组件,组件 B 就是子组件。
张炳
2019/08/02
9150
Vue3.x相对于Vue2.x的变化
ps: 上图中,一种颜色代表一个功能,我们可以看到Options API的功能代码比较分散;Composition API则可以将同一个功能的逻辑,组织在一个函数内部,利于维护。
conanma
2021/11/03
9370
相关推荐
vue之组件边界情况处理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档