javascript - vue的directive中的paramWatchers可以监测数组吗?
PHP中文网
PHP中文网 2017-04-11 12:22:18
[JavaScript讨论组]

想做一个前端全选的directive,调用如下


        

{{data.text}}

指令的形式如下

export default {
    'check-all': {
        deep: true,
        params: ['checkData'],
        bind() {
            console.log('bind');
            console.log(this.params.checkData);
        },
        update(newValue, oldValue) {
            console.log(newValue, oldValue);
        },
        unbind() {
            console.log('unbind');
        },
        paramWatchers: {
            'checkData': function (newValue, oldValue) {
                console.log(newValue);
            },
        },
    },
};

checkData的数据如下:

checkData: [
                    {
                        text: '1',
                        checked: false,
                    },
                    {
                        text: '2',
                        checked: false,
                    },
                    {
                        text: '3',
                        checked: false,
                    },
                    {
                        text: '4',
                        checked: false,
                    },
                ]

当checkData中的元素checked状态改变时,更改checkAll的状态,但是paramWatchers监听不了checkData的更改,请问是什么原因呢?要在指令里面监听checkData的状态更改要怎样做?

这样可以监测:
https://jsfiddle.net/lincenyi...

但是通过v-model绑定,就监测不到了:
https://jsfiddle.net/dv0dmsrr/

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
迷茫

经群友提醒,和看了一下源码,paramWatchers应该调用的是watch,没用深检测,不知道是不是这样。源码如下:

Directive.prototype._setupParamWatcher = function (key, expression) {
  var self = this;
  var called = false;
  var unwatch = (this._scope || this.vm).$watch(expression, function (val, oldVal) {
    self.params[key] = val;
    // since we are in immediate mode,
    // only call the param change callbacks if this is not the first update.
    if (called) {
      var cb = self.paramWatchers && self.paramWatchers[key];
      if (cb) {
        cb.call(self, val, oldVal);
      }
    } else {
      called = true;
    }
  }, {
    immediate: true,
    user: false
  });(this._paramUnwatchFns || (this._paramUnwatchFns = [])).push(unwatch);
};
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号