angular - 在 Angular 中确定“组件值的变化”是否是检测到的变化的结果
问题描述
我们正在使用 DevExtreme 的“开关”组件,并设置了onValueChanged
该组件的事件以执行某些操作。
但是,这也会在绑定对象的属性值发生更改时触发(作为更新基础数据的结果)。
但我们只想在用户更改开关值时执行该操作。
那么如何检测更改是否是 ChangeDetection 更新的结果呢?
html代码:
<dx-form [formData]="myobject" [colCount]="6">
<dxi-item dataField="myobjectprop" editorType="dxSwitch" [editorOptions]="{ value:myobject.myobjectprop, onValueChanged:someaction }" cssClass="switch-right-label">
<dxo-label text="my property" location="right" alignment="left">
</dxo-label>
</dxi-item>
</dx-form>
ts代码
import { Component, OnInit } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Component({
selector: 'app-test-my-object',
templateUrl: './test-my-object.component.html',
styleUrls: ['./test-my-object.component.scss']
})
export class TestMyObjectComponent implements OnInit {
myobject: MyObject;
onObjectChanged: BehaviorSubject<MyObject>;
constructor() {
this.onObjectChanged = new BehaviorSubject(new MyObject());
}
ngOnInit(): void {
this.onObjectChanged
.subscribe(newmyobject => {
this.myobject = newmyobject;
});
}
someaction = (): Promise<boolean> => {
// Do something when the data changed
// - but not when change is a result of using using 'changeObject' <= how to know that???
return new Promise((resolve, reject) => { /*...*/ });
}
changeObject(): void {
const obj = new MyObject();
obj.myobjectprop = !this.myobject.myobjectprop;
this.onObjectChanged.next(obj);
}
}
export class MyObject {
myobjectprop: boolean;
}
解决方案
终于找到了解决方案(至少在使用 DevExteme 组件时)。
基本上需要检查,event
通过事件处理程序传递的事件对象的属性是否已设置(或未设置)。
例子:
someaction = (e): Promise<boolean> => {
if (e.event === undefined) {
// event was triggered by code
return Promise.resolve(false);
}
return new Promise((resolve, reject) => { /*...*/ });
}
推荐阅读
- r - 如何使用其他列 (R) 中的值创建列?
- heap - 是否可以仅使用 percolate down 来构建最小堆?
- sql - 按月选择记录数
- excel - 为什么字典类的 Typename 函数这么慢?
- django - AWS EB CLI Django
- javascript - 有人可以帮我解释为什么这个功能没有做我想要的吗
- apache-spark - 如何避免 Hive 暂存区写入云
- graphql - 放大数据存储错误:预期标量并获得用户
- git - 致命:无法更新 ref 'head':无法附加到 '.git/logs/head':无效参数
- resharper - ReSharper 扩展管理器看不到本地包