【问题标题】:PrimeNG Multiselect autofocusPrimeNG 多选自动对焦
【发布时间】:2020-11-07 11:25:41
【问题描述】:


在 Angular v7 项目中使用 PrimgNG v7.1.3。

在一个简单的组件中实现了多选 (https://www.primefaces.org/primeng-7.1.3/#/multiselect)。
页面加载时需要设置焦点。

以下解决方案适用于 Dropdown,但不适用于 Multiselect:

在 HTML 中: <p-dropdown #someDropdown></p-dropdown>

在组件中:

import { Dropdown } from 'primeng/dropdown';
@ViewChild('someDropdown') someDropdown: Dropdown;

this.someDropdown.applyFocus();

但是对于Multiselect,它会抛出这种方法无效的错误。

尝试了这个 SO 链接中提到的“ngIf 内控制”的第一个答案,仍然没有运气:primeng: Setting focus on control
也检查了 PrimeNG 文档和用户指南,但没有提及对焦功能。

后来也在下面尝试。一个都没用。

this.someMultiSelect.focus();
this.someMultiSelect.applyFocus();

this.someMultiSelect.el.focus();
this.someMultiSelect.el.applyFocus();

this.someMultiSelect.el.nativeElement.focus();
this.someMultiSelect.el.nativeElement.applyFocus();

this.someMultiSelect.containerViewChild.focus();
this.someMultiSelect.containerViewChild.applyFocus();

this.someMultiSelect.containerViewChild.nativeElement.focus();
this.someMultiSelect.containerViewChild.nativeElement.applyFocus();

Stackblitz:https://stackblitz.com/edit/primeng-multiselect-autofocus

请提出建议。

感谢任何帮助。

【问题讨论】:

    标签: angular primeng autofocus primeng-dropdowns


    【解决方案1】:

    您可以通过ViewChild 获取元素并使用此技巧使其突出显示。

    类似这样的:

    组件

    import { MultiSelect } from 'primeng/multiselect';
    
    export class AppComponent implements AfterViewInit {
      name = 'Angular';
    
      @ViewChild('someDropdown') someDropdown: MultiSelect; // <--- you need to import this from PrimeNG Library
    
     ngAfterViewInit() {
       setTimeout(() => {
         this.someDropdown.containerViewChild.nativeElement.click();  
         this.someDropdown.hide();
       }, 300);
    
      }
    
    

    这是 Stackblitz 示例:

    https://stackblitz.com/edit/ngprime-multiselect-efpy6z?embed=1&file=src/app/app.component.ts

    【讨论】:

    • 我需要设置焦点而不是打开多选。用户可能希望也可能不希望打开多选,但应将焦点设置在页面加载本身上。
    • @KunalDethe 你能再检查一下这个例子吗?这是你想要的吗?
    • 我已在说明中添加了 Stackblitz 链接。
    • 为了简化测试部分,添加了一个按钮,点击它应该将焦点放在元素上。
    • @KunalDethe 是的,我看到了您创建的示例,但请您澄清一下,您所说的将焦点放在元素上是什么意思?您的意思是要以某种方式突出显示多选字段吗?
    猜你喜欢
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多