javascript - Angular - 如果表单 block 处于焦点状态,则显示输入

标签 javascript html angular typescript

我有一个看起来像这样的 Angular 形式(删除上下文的缩短版本):

<form [formGroup]="myForm">
    Name: <input type="text" formControlName="myName">
    <div>
        Gender: <input type="text" formControlName="myGender">
    </div>
</form>

我想要完成的是,通过单击性别输入字段,将显示 2 个单选按钮,当单击性别表单 block 之外的某个位置时,按钮消失。为此,我在我的组件中添加了一个 bool 变量 ts:

export class MyFormComponent implements OnInit {
  genderFocused: boolean = false;
  constructor(
  ) { }

  ngOnInit() {
  }
}

并尝试了这样的事情:

<form [formGroup]="myForm">
    Name: <input type="text" formControlName="myName">
    <div tabindex="-1" (focusout)="genderFocused = false">
        Gender: <input type="text" formControlName="myGender" (focus)="genderFocused = true">
        <label>Yes<input type="radio"></label>
        <label>No<input type="radio"></label>
    </div>
</form>

然而,只要我点击其中一个单选按钮,它们就会立即消失。我环顾四周,没有发现任何可以帮助我解决这个问题的东西。

我用文本输入字段替换了单选按钮,它的行为方式完全相同。一旦 div 中的输入字段获得焦点,它就会消失,这不是预期的

最佳答案

您可以使用@HostListener 来检查元素是否在外部被单击并为*ngIf 条件设置一个标志:

 @HostListener('document:click', ['$event'])
  clickout(event) {
    if(this.eRef.nativeElement.contains(event.target)) {
      this.clickedOutside = false;
    } else {
      this.clickedOutside = true;
    }
  }

正如这个答案所建议的那样: Detect click outside Angular component

关于javascript - Angular - 如果表单 block 处于焦点状态,则显示输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57759024/

相关文章:

javascript - 向多个 Controller 提交一个表单

angular - 为什么 Ngrx-Effects 不在继承的泛型类中自动订阅

jquery - 使子 div 移动父 div

php - 将 php 用于模块化目的的另一种方法

css - Angular动态组件——添加Class等属性

javascript - AOT : Error: Uncaught (in promise): TypeError: Cannot read property '$' of undefined

javascript - 如何从回调函数中设置值?

javascript - 在 jquery 移动列表中使用自定义图标

Javascript 使用 if 语句声明变量

html - CSS/HTML 背景图片不工作