下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 12 | 合理应用计算属性和侦听器
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

Vue开发实战

共53讲 · 53课时,约500分钟
10545
免费
01 | 课程介绍
免费
02 | Vue简介
免费
03 | 内容综述
免费
04 | 第一个Vue程序
免费
05 | 组件基础及组件注册
免费
06 | Vue组件的核心概念:事件
免费
07 | Vue组件的核心概:插槽
08 | 理解单文件组件
09 | 双向绑定和单向数据流不冲...
10 | 理解虚拟DOM及key属性的...
11 | 如何触发组件的更新
12 | 合理应用计算属性和侦听器
13 | 生命周期的应用场景和函数...
14 | 指令的本质是什么
15 | 常用高级特性provide/inj...
16 | 如何优雅地获取跨层级组件...
17 | template和JSX的对比以及...
18 | 为什么需要Vuex
19 | 如何在Vue中使用Vuex
20 | Vuex核心概念及底层原理
21 | Vuex最佳实践
22 | Vue Router的使用场景
23 | 选择何种模式的路由及底层...
24 | Nuxt解决了哪些问题?
25 | Nuxt核心原理是什么?
26 | UI组件库对比:Element U...
27 | 提升开发效率和体验的常用...
28 | 单元测试的重要性及其使用
29 | 生态篇习题解答(上)
30 | 生态篇习题解答(下)
31 | Ant Design Pro介绍
32 | 使用Vue CLI 3快速创建...
33 | 如何自定义Webpack和Babel...
34 | 如何设计一个高扩展性的路...
35 | 实现一个可动态改变的页面...
36 | 如何将菜单和路由结合
37 | 如何使用路由管理用户权限
38 | 更加精细化的权限设计(权...
39 | 如何在组件中使用ECharts...
40 | 如何高效地使用Mock数据进...
41 | 如何与服务端进行交互(Ax...
42 | 创建一个普通表单
43 | 初始数据、自动校验、动态...
44 | 创建一个分步表单
45 | 自己封装一个支持自动校验...
46 | 如何管理系统中使用的图标
47 | 如何定制主题及动态切换主...
48 | 如何做好国际化
49 | 如何高效地构建打包发布
50 | 如何构建可交互的组件文档
51 | 如何做好组件的单元测试
52 | 如何发布组件到npm
53 | GitHub相关生态应用(持续...

精选留言(21)

  • 置顶
    2019-03-20
    本章节最后习题部分,表述有误,应该是防抖,不是节流 大家可以回顾下节流和防抖的区别
    9
  • 2019-03-19
    $forceUpdate这个方法好想从没见过 也没用过

    作者回复: 平常业务开发中是比较少用的 其实就是强制更新的意思 不管数据是否变化

    4
  • 2019-03-23
    ```js
    watch: {
        firstname: (function () {
          var timer = null;
          return function (val) {
            clearTimeout(timer)
            timer = setTimeout(() => this.fullname = val + ' ' + this.lastname , 500)
          }
        })(),
        lastname: (function(val) {
          var timer = null;
          return function () {
            clearTimeout(timer)
            timer = setTimeout(() => this.fullname = this.firstname + " " + val , 500)
          }
        })()
      }
    ```
    展开
    2
  • 2019-03-19
    哦哦,原来。还有就是 Debounce是防抖吧,我记得老师您在讲堂说的是节流

    作者回复: 对的 我要表达的实际上是“防抖”

    1
  • 2019-09-23
    #5W2H#
    What:计算属性computer 和 监-听-器watch
    Why:null
    Who:null
    Where:数据有变化的是否用
    When:null
    How:监-听-器能做的,计算属性都能做;反之不行
    How much/how good/how bad:null
    展开
  • 2019-08-30
    请问vue适合做互联网主站?对seo和301的支持成熟吗?
  • 2019-06-28
    防抖和节流的区别,有什么好的资料推荐下
  • 2019-05-21
    谢谢老师

    作者回复: 感谢支持

  • 2019-05-16
    watch一个含有多级属性的对象时,当子级属性发生变化,handler方法的表示新旧值的两个参数会出现值相同的bug,请问老师有没有比较好的解决办法呢?

    作者回复: 这不是bug,引用类型都是如此,
    我的使用方式是直接监听 这个对象,更改的时候直接更改这个对象,而不是更改这个子属性 如:this.obj = {...this.obj} 每次都是新值

  • 2019-04-20
    计算属性底层是怎么做缓存的,麻烦理一下
  • 2019-04-15
    老师,为什么computed中now的值没有变化

    作者回复: computed中的值是否变化依赖的是响应式数据,而now依赖的是Data.now(), 这个值并不是响应式数据

  • 2019-04-12
    不是很理解 @click="() => $forceUpdate()"
    这个 => 是什么意思?

    作者回复: 箭头函数 es6 js新标准 应该说也谈不上新了 建议学习一下 后面我们很多都是使用的新标准

  • 2019-04-03
    这个防抖很实用的
  • 2019-03-25
    老师,方便把ppt发一下吗?看你有些图挺不错的画的,有助于理解,谢谢

    作者回复: 视频下方挂出来的github链接里面有课件哈

  • 2019-03-25
    请问老师,watch 和 computed 有性能差距吗?

    作者回复: 单纯监听的话,没有 不过computed可以缓存数据,有些场景是有性能提升的

  • 2019-03-23
    function debounce(fn, wait, immediate) {
        let timer = null;
        return function() {
            let args = arguments;
            let context = this;
            if(immediate && !timer) {
                fn.apply(context, args);
            }
            if(timer) clearTimeout(timer);
            timer = setTimeout(() => {
                fn.apply(context, args);
            }, wait);
        }
    }
    展开
  • 2019-03-22
    老师有更好的方法实现吗。后续的视频会讲布置的作业吗?
    防抖作业
    // 通过闭包的原来实现
      function delayer(func) {
        let timer = null
        return function (newValue) {
          clearTimeout(timer)
          timer = setTimeout(() => {
            func(newValue, this)
          }, 1000)
        }
    }


     watch: {
        firstName: delayer((newValue, _this) => {
          _this.fullName = newValue
        })
      }
    展开

    作者回复: 会讲的哈,实现形式很多种,都可以看看大家的实现形式,没有最优 只有更优

  • 2019-03-21
    我觉得尽量用 computed、事件 等方式达到目的,尽量不用 watch,因为前二者比较容易明白触发时机,后者只要数据更改了就会触发,不容易掌握这个触发时机,有时候容易出现一些意料之外的触发,引起bug。

    作者回复: 如果出现意料之外的bug,那应该是使用方式的不对,可以进一步排查下问题。
    不过,能用computed当然还是尽量用computed

  • vue中监听数组的变化,底层原理就是重写了数组的push等方法,当然并不是直接覆盖Array原型上的方法,而是将声明数组的__proto__改成自己封装的原型

    作者回复: https://github.com/vuejs/vue/blob/dev/src/core/observer/array.js#L27
    通过Object.defineProperty改写了原方法,27行original是改写前记录的数组原方法,然后额外添加了Vue自己的逻辑

  • 2019-03-19
    this.$watch(key, throttle(function() {}, 500))

    作者回复: 不是应该用 Debounce 跟个合理嘛