This commit is contained in:
2022-07-21 03:28:35 +00:00
parent d7c883d6df
commit 51b34b0e1d
30103 changed files with 4152204 additions and 23 deletions
+39
View File
@@ -0,0 +1,39 @@
import Vue from 'vue';
/**
* This mixin provides `attrs$` and `listeners$` to work around
* vue bug https://github.com/vuejs/vue/issues/10115
*/
function makeWatcher(property) {
return function (val, oldVal) {
for (const attr in oldVal) {
if (!Object.prototype.hasOwnProperty.call(val, attr)) {
this.$delete(this.$data[property], attr);
}
}
for (const attr in val) {
this.$set(this.$data[property], attr, val[attr]);
}
};
}
export default Vue.extend({
data: () => ({
attrs$: {},
listeners$: {}
}),
created() {
// Work around unwanted re-renders: https://github.com/vuejs/vue/issues/10115
// Make sure to use `attrs$` instead of `$attrs` (confusing right?)
this.$watch('$attrs', makeWatcher('attrs$'), {
immediate: true
});
this.$watch('$listeners', makeWatcher('listeners$'), {
immediate: true
});
}
});
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/mixins/binds-attrs/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAAkC,KAAlC;AAEA;;;;;AAKA,SAAS,WAAT,CAAsB,QAAtB,EAAsC;AACpC,SAAO,UAAqB,GAArB,EAA0B,MAA1B,EAAgC;AACrC,SAAK,MAAM,IAAX,IAAmB,MAAnB,EAA2B;AACzB,UAAI,CAAC,MAAM,CAAC,SAAP,CAAiB,cAAjB,CAAgC,IAAhC,CAAqC,GAArC,EAA0C,IAA1C,CAAL,EAAsD;AACpD,aAAK,OAAL,CAAa,KAAK,KAAL,CAAW,QAAX,CAAb,EAAmC,IAAnC;AACD;AACF;;AACD,SAAK,MAAM,IAAX,IAAmB,GAAnB,EAAwB;AACtB,WAAK,IAAL,CAAU,KAAK,KAAL,CAAW,QAAX,CAAV,EAAgC,IAAhC,EAAsC,GAAG,CAAC,IAAD,CAAzC;AACD;AACF,GATD;AAUD;;AAED,eAAe,GAAG,CAAC,MAAJ,CAAW;AACxB,EAAA,IAAI,EAAE,OAAO;AACX,IAAA,MAAM,EAAE,EADG;AAEX,IAAA,UAAU,EAAE;AAFD,GAAP,CADkB;;AAMxB,EAAA,OAAO,GAAA;AACL;AACA;AACA,SAAK,MAAL,CAAY,QAAZ,EAAsB,WAAW,CAAC,QAAD,CAAjC,EAA6C;AAAE,MAAA,SAAS,EAAE;AAAb,KAA7C;AACA,SAAK,MAAL,CAAY,YAAZ,EAA0B,WAAW,CAAC,YAAD,CAArC,EAAqD;AAAE,MAAA,SAAS,EAAE;AAAb,KAArD;AACD;;AAXuB,CAAX,CAAf","sourcesContent":["import Vue, { WatchHandler } from 'vue'\n\n/**\n * This mixin provides `attrs$` and `listeners$` to work around\n * vue bug https://github.com/vuejs/vue/issues/10115\n */\n\nfunction makeWatcher (property: string): ThisType<Vue> & WatchHandler<any> {\n return function (this: Vue, val, oldVal) {\n for (const attr in oldVal) {\n if (!Object.prototype.hasOwnProperty.call(val, attr)) {\n this.$delete(this.$data[property], attr)\n }\n }\n for (const attr in val) {\n this.$set(this.$data[property], attr, val[attr])\n }\n }\n}\n\nexport default Vue.extend({\n data: () => ({\n attrs$: {} as Dictionary<string>,\n listeners$: {} as Dictionary<Function | Function[]>,\n }),\n\n created () {\n // Work around unwanted re-renders: https://github.com/vuejs/vue/issues/10115\n // Make sure to use `attrs$` instead of `$attrs` (confusing right?)\n this.$watch('$attrs', makeWatcher('attrs$'), { immediate: true })\n this.$watch('$listeners', makeWatcher('listeners$'), { immediate: true })\n },\n})\n"],"sourceRoot":"","file":"index.js"}