Angular反应形式valueChanges-仅UI更改

MgS*_*Sam 9 angular angular-reactive-forms

Angular FormControl有一个valueChangesObservable指出:

每当控件的值更改时,都会在UI中或以编程方式发出事件。

有没有一种方法可以将FormControl设置为忽略程序化值更改?(基本上等效OneWayToSource于.NET中的绑定)

具体来说,我面临的问题是我的valueChanges订阅,我正在更新一堆绑定到一堆其他控件的值,然后valueChanges也会触发所有这些控件,这在它们执行操作时会出现问题他们的valueChanges处理程序与用户实际触摸的控件冲突。

Tom*_*ula 8

您可以通过将选项传递{ emitEvent: false }setValue调用来跳过发出valueChange事件。

setValue(value: any, options: {
    onlySelf?: boolean;
    emitEvent?: boolean;
    emitModelToViewChange?: boolean;
    emitViewToModelChange?: boolean;
} = {}): void
Run Code Online (Sandbox Code Playgroud)

另外,您可能想看看其他选项。

如果onlySelf为true,则此更改将仅影响此FormControl的验证,而不影响其父组件。默认为false。

如果emitEvent为true,则此更改将导致在FormControl上发出valueChanges事件。默认为true(因为它属于updateValueAndValidity)。

如果emitModelToViewChange为true,则将通过onChange事件将新值通知给视图。如果未指定emitModelToViewChange,则这是默认行为。

如果emitViewToModelChange为true,则将触发ngModelChange事件以更新模型。如果未指定emitViewToModelChange,则这是默认行为。

文件