Vue @Watch 不触发布尔值更改
Vue @Watch not triggering on a boolean change
我正在尝试在 vue-ts 中使用监视功能。
我已经设置了一个监视函数,只要布尔变量值发生变化就会触发,
它根本不火,我不明白为什么。
我的代码:
这里是数据声明
<script lang="ts">
import { Vue, Component, Prop, Watch } from "vue-property-decorator";
import { CSSModule } from "@/Services/Modules/CSSModule";
@Component({})
export default class CommentCard extends Vue {
@Prop() comment!: Object;
@Prop() cmEditor!: Object;
@Prop() nextCommentDistance!: number;
@Prop({ default: 300 }) width!: number;
@Prop() commentIndex!: number;
private initialHeight: string;
private textMarker: Object;
private cssModule: Object;
private isFocused: boolean;
在挂载上我正在更改数据值,所以手表应该被触发
mounted() {
this.setDivHeight();
this.isFocused = false;
}
这是函数
@Watch("isFocused")
highlightComment() {
if (this.textMarker) {
this.textMarker.clear();
}
const css = this.isFocused
? "background-color: " +
this.cssModule.hexToRgba(this.comment.typeColor, 0.5)
: "background-color: " +
this.cssModule.hexToRgba(this.comment.typeColor, 0.8) +
"; box-shadow: 5px 5px 4px rgb(23,24,26)";
let locations = this.comment.serialize.replace("N", "");
locations = locations.split(",");
let startLocation = locations[0].split(":");
let endLocation = locations[1].split(":");
this.textMarker = this.cmEditor.markText(
{ line: parseInt(startLocation[0]), ch: parseInt(startLocation[1]) },
{ line: parseInt(endLocation[0]), ch: parseInt(endLocation[1]) },
{
css: css,
}
);
}
它根本没有被调用,我什至在安装后用一个按钮改变了 isFocused 的值,但它仍然触发了手表。
谢谢。
您必须初始化您的属性才能使其具有反应性。
而不是:
private isFocused: boolean;
使用
private isFocused: boolean = false;
您应该为 Vue 应用程序中的每个 属性 执行此操作。请注意,您可以使用 null
;只要 属性 不是 undefined
,它就可以工作。
我正在尝试在 vue-ts 中使用监视功能。 我已经设置了一个监视函数,只要布尔变量值发生变化就会触发, 它根本不火,我不明白为什么。
我的代码:
这里是数据声明
<script lang="ts">
import { Vue, Component, Prop, Watch } from "vue-property-decorator";
import { CSSModule } from "@/Services/Modules/CSSModule";
@Component({})
export default class CommentCard extends Vue {
@Prop() comment!: Object;
@Prop() cmEditor!: Object;
@Prop() nextCommentDistance!: number;
@Prop({ default: 300 }) width!: number;
@Prop() commentIndex!: number;
private initialHeight: string;
private textMarker: Object;
private cssModule: Object;
private isFocused: boolean;
在挂载上我正在更改数据值,所以手表应该被触发
mounted() {
this.setDivHeight();
this.isFocused = false;
}
这是函数
@Watch("isFocused")
highlightComment() {
if (this.textMarker) {
this.textMarker.clear();
}
const css = this.isFocused
? "background-color: " +
this.cssModule.hexToRgba(this.comment.typeColor, 0.5)
: "background-color: " +
this.cssModule.hexToRgba(this.comment.typeColor, 0.8) +
"; box-shadow: 5px 5px 4px rgb(23,24,26)";
let locations = this.comment.serialize.replace("N", "");
locations = locations.split(",");
let startLocation = locations[0].split(":");
let endLocation = locations[1].split(":");
this.textMarker = this.cmEditor.markText(
{ line: parseInt(startLocation[0]), ch: parseInt(startLocation[1]) },
{ line: parseInt(endLocation[0]), ch: parseInt(endLocation[1]) },
{
css: css,
}
);
}
它根本没有被调用,我什至在安装后用一个按钮改变了 isFocused 的值,但它仍然触发了手表。
谢谢。
您必须初始化您的属性才能使其具有反应性。
而不是:
private isFocused: boolean;
使用
private isFocused: boolean = false;
您应该为 Vue 应用程序中的每个 属性 执行此操作。请注意,您可以使用 null
;只要 属性 不是 undefined
,它就可以工作。