Angular 全局关闭物料的自动完成功能';马提普酒店
是否有任何方法可以全局关闭物料的Angular 全局关闭物料的自动完成功能';马提普酒店,angular,angular-material,Angular,Angular Material,是否有任何方法可以全局关闭物料的MatInput字段上的自动完成行为?我想摆脱这个到处重复的锅炉铭牌代码: 例如,类似于在应用模块的提供者数组中全局定义带有注入令牌的表单字段的外观和标签选项: //物料表单字段的默认外观 {提供:MAT_FORM_FIELD_DEFAULT_选项,useValue:{appearance:'fill'}}, //全局禁用材质表单字段的标签 {提供:MAT_LABEL_GLOBAL_选项,useValue:{float:'never'} 我扫描了文档和源代码
MatInput
字段上的自动完成行为?我想摆脱这个到处重复的锅炉铭牌代码:
例如,类似于在应用模块的提供者数组中全局定义带有注入令牌的表单字段的外观和标签选项:
//物料表单字段的默认外观
{提供:MAT_FORM_FIELD_DEFAULT_选项,useValue:{appearance:'fill'}},
//全局禁用材质表单字段的标签
{提供:MAT_LABEL_GLOBAL_选项,useValue:{float:'never'}
我扫描了文档和源代码,没有找到任何内容。正如我在评论中所说的,如果没有更好的解决方案,您可以添加一个全局脚本,将
autocomplete=“off”
设置到所有matInput元素中
例如,您可以在polyfills.ts
文件中添加此代码段:
document.addEventListener('DOMContentLoaded', () => {
Array.from(document.querySelectorAll('input[matInput]'))
.forEach(element => {
element.setAttribute('autocomplete', 'off');
});
});
注:考虑将箭头函数转换为普通函数,以支持IE11
稍微晚一点,但可能会有帮助。 您只需添加以下简单指令:
import { Directive, HostBinding, Attribute } from '@angular/core';
@Directive({
selector: '[matInput]',
})
export class AutocompleteOffDirective {
@HostBinding('attr.autocomplete') auto;
constructor(@Attribute('autocomplete') autocomplete: string) {
this.auto = autocomplete || 'off'
}
}
如果您选择覆盖autocomplete属性,它将从元素中获取文本。我认为没有这样的选项。有一个
MAT\u AUTOCOMPLETE\u DEFAULT\u选项
token,但没有禁用它的选项。你可以试试全球脚本这是我的担心。你有这样一个全局脚本攻击的来源吗?我们可以使用autocomplete=“off”
到form
标记中,而不是将它添加到所有输入元素中吗?当DOM更改时,侦听器不会被触发。我试过使用MutationObserver
,但它确实会扼杀任何性能,因为当我观察body的变化时,它几乎会无休止地被触发。。。所以,我认为它不值得麻烦。@ SL3DG3你是对的,这不考虑<代码> *NGIF < /代码>