@Watch装饰器未激活
@Watch decorator not activating
我有一个简单的测试组件,模板如下所示:
<template>
<div>
<input type="text" v-model="name" class="form-control">
<h5>{{ message }}</h5>
</div>
</template>
<script src="./test.ts" lang="ts"></script>
组件 TypeScript 如下所示:
declare var Vue: typeof Function;
declare var VueClassComponent: any;
import { Component, Inject, Model, Prop, Watch } from "vue-property-decorator";
@VueClassComponent.default({
template: require("./test.vue"),
style: require("./test.sass"),
props: {
name: String,
num: Number
}
})
export default class TestComponent extends Vue {
name: string;
num: number;
message: string = "";
@Watch("name")
protected onNameChanged(newName: string, oldName: string): any {
console.log("setting " + oldName + " to " + newName);
}
mounted(this: any): void {
console.log("mounted called");
this.message = "Hello " + this.name + " " + this.num;
}
}
当我在 input
框中键入时,@Watch("name") 处理程序永远不会触发,但是我确实在 console
:
中遇到了这些错误
[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "name"
在 input
框中输入每个字符一次。我不知道在哪里设置名称,因为我没有在任何地方设置它。虽然这是我的目标(更新名称)我一直在读你不能直接更改值,你需要设置 @Watch 处理程序,然后在其他地方设置它们(我仍然不完全理解 如何但现在甚至无法获得。
根据我们的讨论,这里问题的根源在于将 name
声明为 属性。目的是 name
是一个内部值,可以简单地用于导出 message
。在这种情况下,手表是不必要的,计算机就可以了。
declare var Vue: typeof Function;
declare var VueClassComponent: any;
import { Component, Inject, Model, Prop, Watch } from "vue-property-decorator";
@VueClassComponent.default({
template: require("./test.vue"),
style: require("./test.sass"),
props: {
num: Number
}
})
export default class TestComponent extends Vue {
name: string;
num: number;
get message(){
return "Hello " + this.name + " " + this.num;
}
}
我有一个简单的测试组件,模板如下所示:
<template>
<div>
<input type="text" v-model="name" class="form-control">
<h5>{{ message }}</h5>
</div>
</template>
<script src="./test.ts" lang="ts"></script>
组件 TypeScript 如下所示:
declare var Vue: typeof Function;
declare var VueClassComponent: any;
import { Component, Inject, Model, Prop, Watch } from "vue-property-decorator";
@VueClassComponent.default({
template: require("./test.vue"),
style: require("./test.sass"),
props: {
name: String,
num: Number
}
})
export default class TestComponent extends Vue {
name: string;
num: number;
message: string = "";
@Watch("name")
protected onNameChanged(newName: string, oldName: string): any {
console.log("setting " + oldName + " to " + newName);
}
mounted(this: any): void {
console.log("mounted called");
this.message = "Hello " + this.name + " " + this.num;
}
}
当我在 input
框中键入时,@Watch("name") 处理程序永远不会触发,但是我确实在 console
:
[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "name"
在 input
框中输入每个字符一次。我不知道在哪里设置名称,因为我没有在任何地方设置它。虽然这是我的目标(更新名称)我一直在读你不能直接更改值,你需要设置 @Watch 处理程序,然后在其他地方设置它们(我仍然不完全理解 如何但现在甚至无法获得。
根据我们的讨论,这里问题的根源在于将 name
声明为 属性。目的是 name
是一个内部值,可以简单地用于导出 message
。在这种情况下,手表是不必要的,计算机就可以了。
declare var Vue: typeof Function;
declare var VueClassComponent: any;
import { Component, Inject, Model, Prop, Watch } from "vue-property-decorator";
@VueClassComponent.default({
template: require("./test.vue"),
style: require("./test.sass"),
props: {
num: Number
}
})
export default class TestComponent extends Vue {
name: string;
num: number;
get message(){
return "Hello " + this.name + " " + this.num;
}
}