【发布时间】:2018-05-01 02:24:07
【问题描述】:
我正在使用带有 TypeScript 和 vue-property-decorator 的 Vue.js。我想在父组件和子组件之间执行一些双向数据绑定。这是我想要做的一个简单的想法:
父组件
<template>
<progress :is-loaded.sync="isLoaded"/>
</template>
@Component
export default class ParentComponent extends Vue {
get isLoaded() { return Store.getters["isLoaded"]; }
set isLoaded(value: boolean) { Store.commit("isLoaded", value); }
}
子组件
<template>
<progress :value="_value" min="0" max="100"></progress>
{{_isLoaded}}
</template>
@Component
export default class ChildComponent extends Vue {
@Prop()
public isLoaded: boolean;
public _isLoaded: boolean;
public _value: number;
public mounted() {
this._isLoaded = this.isLoaded;
this._value = this.value;
}
@Watch("isLoaded")
public onIsLoadedChanged() {
if (!isLoaded) {
// Animate _value from 0 to 100.
this._isLoaded = true;
this.$emit("update:isLoaded", this._isLoaded);
}
}
}
我真的必须使用两个字段isLoaded 和_isLoaded 以及使用this.$emit 和update:isLoaded 的魔术字符串吗?所有这些语法似乎都很冗长,有没有更简单的方法?有什么方法可以封装其中的一些吗?
【问题讨论】:
标签: typescript vue.js vuejs2 vue-component two-way-binding