为 ngx-mat-datetime-picker 设置 autocomplete=off
Set autocomplete=off for ngx-mat-datetime-picker
我想删除 ngx-mat-datetime-picker 的自动完成时间
我尝试在 html
中设置
<ngx-mat-datetime-picker autocomplete="off">
并使用 autocimplete="off" 创建了指令
@Directive({
selector: 'input:not([autocompleteOn])'
})
export class AutocompleteDirective {
@HostBinding('attr.autocomplete') autoComplete = 'off';
constructor() {}
}
但它不起作用,自动完成仍然出现
enter image description here
由于下面的规则 angular 不能 select dom 中的所有元素。这就是 input:not([autocompleteOn])
不起作用的原因。
Angular only allows directives to apply on CSS selectors that do not cross element boundaries.
https://angular.io/api/core/Directive#selector
这里的库从这个组件指令创建一个模板覆盖ngx-mat-datetime-picker
这就是为什么底层输入标签不继承autocomplete="off"
只在主机标签上添加属性。
使用 JS,您可以手动将自动完成功能添加到所有输入和表单子项。正如这个答案 中所述,但这不会起作用,因为叠加层是稍后在打开对话框时创建的。所以一个解决方案就是这个自定义指令
@Directive({
selector: '[autocompleteoff]'
})
export class MatDatetimePickerAutocompleteOffDirective implements OnDestroy{
openSub;
constructor(private element: NgxMatDatetimePicker<Date>) {
this.openSub = element.openedStream.subscribe((e)=>{
setTimeout(()=>{
Array.from(element._popupRef.hostElement.querySelectorAll('input'))
.forEach(element => {
element.setAttribute('autocomplete', 'off');
});
})
})
}
ngOnDestroy(){
if(this.openSub) this.openSub.unsubscribe();
}
}
由于某种原因,事件 openedStream 在输入呈现之前触发得太早,使得此解决方案需要这个丑陋的 setTimeout 才能工作。
值得注意我的浏览器(chrome 最新版)我没有在此处的示例中显示自动完成功能
https://stackblitz.com/edit/angular-zdh58h-dzi5yv?file=src%2Fapp%2Fcard-overview-example.ts
None 越少,可以通过检查 dom
断言将所有日期选择器输入设置为属性 autocomplete="off"
的 objective
我想删除 ngx-mat-datetime-picker 的自动完成时间
我尝试在 html
中设置<ngx-mat-datetime-picker autocomplete="off">
并使用 autocimplete="off" 创建了指令
@Directive({
selector: 'input:not([autocompleteOn])'
})
export class AutocompleteDirective {
@HostBinding('attr.autocomplete') autoComplete = 'off';
constructor() {}
}
但它不起作用,自动完成仍然出现 enter image description here
由于下面的规则 angular 不能 select dom 中的所有元素。这就是 input:not([autocompleteOn])
不起作用的原因。
Angular only allows directives to apply on CSS selectors that do not cross element boundaries. https://angular.io/api/core/Directive#selector
这里的库从这个组件指令创建一个模板覆盖ngx-mat-datetime-picker
这就是为什么底层输入标签不继承autocomplete="off"
只在主机标签上添加属性。
使用 JS,您可以手动将自动完成功能添加到所有输入和表单子项。正如这个答案 中所述,但这不会起作用,因为叠加层是稍后在打开对话框时创建的。所以一个解决方案就是这个自定义指令
@Directive({
selector: '[autocompleteoff]'
})
export class MatDatetimePickerAutocompleteOffDirective implements OnDestroy{
openSub;
constructor(private element: NgxMatDatetimePicker<Date>) {
this.openSub = element.openedStream.subscribe((e)=>{
setTimeout(()=>{
Array.from(element._popupRef.hostElement.querySelectorAll('input'))
.forEach(element => {
element.setAttribute('autocomplete', 'off');
});
})
})
}
ngOnDestroy(){
if(this.openSub) this.openSub.unsubscribe();
}
}
由于某种原因,事件 openedStream 在输入呈现之前触发得太早,使得此解决方案需要这个丑陋的 setTimeout 才能工作。
值得注意我的浏览器(chrome 最新版)我没有在此处的示例中显示自动完成功能 https://stackblitz.com/edit/angular-zdh58h-dzi5yv?file=src%2Fapp%2Fcard-overview-example.ts
None 越少,可以通过检查 dom
断言将所有日期选择器输入设置为属性autocomplete="off"
的 objective