使用angular2在table1中单击元素时如何将元素聚焦在table2中

Posted

技术标签:

【中文标题】使用angular2在table1中单击元素时如何将元素聚焦在table2中【英文标题】:How to focus the element in table2, when the element is clicked in table1 using angular2 【发布时间】:2018-01-14 08:37:56 【问题描述】:

我有两张桌子,一张是用于车辆和公司的。如果我点击车辆名称,其相应的公司名称会显示在公司表中。所以,现在我有大约 12 辆车,当我点击第 12 辆车时,它的名称会显示在公司表中,只有当我向上滚动时才能看到。所以我需要直接关注公司名称而不是滚动。请帮忙

这是我的车辆和公司的 html 代码:

车辆表:

<md-card *ngFor="let vehicle of vehicleLists | companyfilter:filter" (click)="goToCompany(vehicle)">
 <div >
    vehicle.vehicleName
  </div> 
   </md-card>

公司表:

<md-card  *ngFor="let company of companyLists | vehiclefilter:myfilter">
 <div>
     company.companyName
 </div></md-card>

TS 代码:

goToCompany(vehicle)
this.document.body.scrollTop = 0;

借助此链接中的答案,我能够得到我的要求: Scroll Top in angular2

但是,这里它只适用于滚动顶部,如果公司名称列表低于vwhicle name,它不会向下。我也需要我的要求才能在移动响应中工作,在这个 plunker 中它工作正常,但不是我的代码。

Plunker 链接: https://plnkr.co/edit/ZjZApeGBk1P6OamYv21T?p=preview 请帮忙。

【问题讨论】:

我不确定焦点功能是否适用于非输入元素。即使通过香草JS 感谢您的回复。可以使用什么来满足我的要求?请帮忙 先让我了解需求。您想在第一个表的链接点击正确后立即自动向上滚动第二个表吗? 如果我滚动获取公司名称.. 不向上滚动,它必须将其聚焦到那里.. 就像我有 12 个车辆名称,所以车辆表将更多和各自的公司条目将只有一个..因此公司名称将在公司表的第一行,而车辆将在第 12 行。因此,它必须专注于公司名称的第一行,而不是滚动和查看 不是 angular2 用户,但这可能会有所帮助 blog.thecodecampus.de/angular-2-set-focus-element 【参考方案1】:

我不明白为什么按车排应该专注于公司排。在逻辑上不应该点击车辆行引导您进入车辆详细信息页面吗?

如果您在车辆对象上有公司名称,您可以。

在公司列表中

  <div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">
         <span id="company.companyName">company.companyName/span>
   </div>

在车辆列表中。添加一个直接显示公司名称的新锚。按此链接开始滚动到公司表

<a href="#vehicle.companyName">vehicle.companyName</a>

您还可以在车辆列表中的公司锚点上添加一个小的浮动 div,以显示最重要的公司数据。所以你不需要把注意力从车辆列表上移开。首先,当您单击锚点时,您应该离开

【讨论】:

感谢您的回复。我会试试的 对不起,我有一个错字。它应该是:vehicle.companyName我会更新答案 是的,我会试着告诉你 我试过但没用..它没有集中注意力,而是在上升 好的,您可以同时查看两个表吗?您不必在页面中向上滚动吗?锚标签解决了滚动问题。当谈到关注显示标签时,我会说这是不可能的,因为它不是输入字段。但是你可以使用 ngClass 来设置它的样式。 1.当您按下我上面建议的锚链接时,您可以添加 (click)="onCompanyNameClick(company.companyName)。在该方法中,您可以在 componay 表中添加 this.selectedComponyName =companyName,您可以进行 ngClass 检查在成员上。并添加一个具有任何背景颜色或样式的类。【参考方案2】:

您可以使用以下方法实现非输入元素的焦点功能

    使用锚标签 为非输入元素添加 tabindex 属性

您可以使用 @Viewchild 和 Renderer 或 ElementRef 访问 Angular 2 中的非输入元素

import --> AfterViewInit

 export class YourComponent implements AfterViewInit 
   @ViewChild('companyTable') vc: any;


  ngAfterViewInit() 
    this.vc.nativeElement.focus();
  
<md-card class="col-lg-12 col-md-12 col-sm-12 col-xs-12" *ngFor="let company of companyLists | vehiclefilter:myfilter">
 <div #companyTable tabindex="0" class="col-lg-4 col-md-4 col-sm-4 col-xs-4" style="text-overflow: ellipsis;overflow: hidden;">
     company.companyName
 </div></md-card>

【讨论】:

感谢回复我会试试的 对不起,它没有滚动顶部,当我点击第 12 辆车时,它必须滚动顶部并显示公司名称。请帮忙 请参考下面的例子plnkr.co/edit/93xihP4APBFKRAImE1SU?p=preview 谢谢我会尝试 如果它正在聚焦,那么肯定会向上滚动到活动元素。如果它在循环中,那么它应该用索引处理。让我再分享一个例子。

以上是关于使用angular2在table1中单击元素时如何将元素聚焦在table2中的主要内容,如果未能解决你的问题,请参考以下文章

通过单击按钮从 HTML 调用 Angular2 组件函数

模板中的Angular 2重复组件引用另一个元素

如何在Angular2中显示和隐藏带有复选框元素的div?

如何在提交按钮表单中使用路由 - Angular2

在父组件中单击按钮时从子组件执行功能:Angular2

如何在Angular2中使用Observable通过id查找数组的元素