- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Angular 版本:6.1
我正在尝试使用 Kara Erickson 所称的 Composite ControlValueAccessor 来实现自定义控件,如演示文稿中所示 Angular Forms – Kara Erickson – AngularConnect 2017 。控件的值应设置为两个子输入值之一。
问题是 writeValue()
似乎仅在最初被调用,而不会在进一步的值更改时被调用。
这是一个stackblitz demo .
<form #f="ngForm" (ngSubmit)="f.form.valid && Submit(f)">
<confirm-password name='password' ngModel #pwd='ngModel'></confirm-password>
<div>{{pwd.status}}</div>
</form>
<div [formGroup]='pass'>
<label>Password:
<input type="password" formControlName='pwd1' (blur)='onTouched()'>
</label>
<div *ngIf="controlDir.touched && controlDir.control.errors?.required"
class="error">Password is required.</div>
<label>Please re-enter password:
<input type="password" formControlName='pwd2' (blur)='onTouched()'>
</label>
<div class='error' *ngIf='controlDir.touched && controlDir.control.errors?.notEqual &&
!controlDir.errors?.required'>Passwords do not match.</div>
</div>
import { Component, Self, OnInit, OnDestroy } from '@angular/core';
import { ControlValueAccessor, AbstractControl, NgControl,
ValidatorFn, Validators, FormGroup, FormControl } from '@angular/forms';
import { Subscription } from 'rxjs';
@Component({
selector: 'confirm-password',
templateUrl: './confirm-password.component.html',
styleUrls: ['./confirm-password.component.css']
})
export class ConfirmPasswordComponent implements ControlValueAccessor, OnInit, OnDestroy
{
password: string; // the value of the control should be set to this value
pass = new FormGroup({
pwd1: new FormControl(),
pwd2: new FormControl()
});
private onChange: (value: string) => void;
private onTouched: (value: string) => void;
private valueChanges: Subscription;
constructor(@Self() public controlDir: NgControl)
{
controlDir.valueAccessor = this;
}
ngOnInit()
{
const control = this.controlDir.control;
let myValidators = [
Validators.required,
equalValidator(this.pass.controls.pwd1,
this.pass.controls.pwd2)
]
// ovoid overwriting any existing validators
let validators = control.validator
? [control.validator, ...myValidators]
: [...myValidators];
control.setValidators(validators);
control.updateValueAndValidity();
}
writeValue(val: any)
{
/* whether everything inside of this method is commented out or not
doesn't seem to affect anything */
console.log(val);
//val && this.pass.setValue(val, {emitEvent: false});
this.password = val;
}
registerOnChange(fn: (val: any) => void)
{
this.valueChanges = this.pass.valueChanges.subscribe(fn);
}
registerOnTouched(fn: () => void)
{
this.onTouched = fn;
}
setDisabledState(disabled: boolean)
{
disabled ? this.pass.disable() : this.pass.enable();
}
ngOnDestroy()
{
this.valueChanges.unsubscribe();
}
}
export function equalValidator(el1, el2): ValidatorFn
{
return (ctrl: AbstractControl): {[key: string]: any} | null => {
const notEqual = el1.value !== el2.value;
return notEqual ? {"notEqual": true} : null;
};
}
最佳答案
writeValue
的目的是通知您的组件有关父组件的更改。您通常想要用它做的是将外部的更改绑定(bind)到局部变量。
为了向外界通知组件内部的更改,您需要调用 onChange
方法。您可以调用它,就像通常调用事件发射器一样。
我在这里整理了几个示例:https://www.tsmean.com/articles/angular/angular-control-value-accessor-example/
关于Angular - controlValueAccessor 方法 writeValue() 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51565659/
当我想在 Angular 中创建自定义表单控件时,我需要实现 ControlValueAccessor ,它定义 writeValue(value:any): void 函数。 现在想象一下,由于其内
我的 ble 外设要求我将十六进制值 0x0001 写入 CCCD 描述符以启用通知。当我尝试使用 .notify 属性将值写入特征时,出现以下错误: Cannot invoke 'writeValu
我正在开发一个 Java 应用程序作为 Google Cloud Messaging Android 应用程序中的服务器。我一直在关注 tutorial我成功地完成了本教程的其余部分。 我的 Java
我无法将值写入 BLE 设备。我翻译了这个: NSLog(@"Writing value for characteristic %@", interestingCharacteristic);
我的 CoreBluetooth 应用程序需要在客户端特征配置描述符中启用“指示位”。这是我所做的: 开始扫描 开始连接设备 调用 discoverServices 调用 discoverCharac
Angular 版本:6.1 我正在尝试使用 Kara Erickson 所称的 Composite ControlValueAccessor 来实现自定义控件,如演示文稿中所示 Angular Fo
我尝试使用 swift CoreBluetooth 库将结构参数发送到远程设备,但我将结构参数复制到数组中。实际上在 C# 的 Windows 应用程序中做了同样的事情,但 swift 语法和代码风格
我正在尝试使用 Jackson 在 Java 中将字符串转换为 JSON 对象。我有两个 jar文件和 maven project库,我用它一个一个地尝试,但在调用 writeValue 函数时都出错
我一直在寻找一种将对象从一个 Activity 传递到另一个 Activity 的方法。不同的教程指出,最好的方法是使类 Parcelable。我已经设法实现了它,但我还有一个问题。 Office 类
在与 TI BLE Keyfob 建立连接并检索特征描述符后,我尝试调用 [peripheral writeValue: nsData forDescriptor: descriptor]; 各
是否可以将 jackson 配置为始终将序列化对象的类型添加到生成的 json 输出中。 例如: package org.acme; class ClassA { String a;
如果我通过设置 DataSourceUpdateMode = Never 关闭绑定(bind)数据源的自动更新,然后使用按钮更新整个批处理(使用 binding.WriteValue),则会出现问题
我正在使用 Bluez-5.43 并使用 dbus API。 尝试使用 WriteValue 方法将值写入特征时,出现以下错误: GDBus.Error:org.freedesktop.DBus.Er
更新:我刚刚检查了他们的示例项目,它是相同的。因此,这可能是一个错误,或者这是预期的行为。 我正在使用 RxBluetoothKit,无法解决以下问题。我有这个包装函数来编写一个特征(我试图用 con
这两种方式在BLE上写特性到底有什么区别?它们是一回事吗? 最佳答案 这两种方法不同,您使用哪种方法取决于您的应用程序在 BLE 通信中扮演的角色。 如果您的应用程序充当外围设备,那么您将使用 CBP
一段时间以来,我尝试在 iPhone Bluetooth 4.0 LE PC 之间建立通信。在网上搜索我发现了很多在 Swift 中支持 BLE 的解决方案。我创建了一个小程序来检测 BLE 设备
我一直在使用 XCode 和 Swift 创建一个应用程序来连接到蓝牙设备(连接了一个 LED 彩条),并且我编写了一段代码可以让它改变颜色。 使用蓝牙嗅探器,我知道我需要发送 '52130056FF
我写了一个非常简单的自定义表单控件,我没有更改它的 changeDetectionStrategy。 @Component({ selector: 'counter', template: `
我在 MacOS 应用程序中有一个外围设备,在 iOS 应用程序中有一个中心设备。中央有如下代码: func peripheral(_ peripheral: CBPeripheral, didDis
目前我们在应用程序中使用 Jackson 1.9.x 并具有以下代码: Object objectMapper = new ObjectMapper(); ..... Serializat
我是一名优秀的程序员,十分优秀!