簡體   English   中英

單擊外部關閉下拉菜單(Angular 4)

[英]Close Dropdown menu by clicking outside of it (Angular 4)

所以我有一個輸入:

<input id='search'placeholder="Search" formControlName='search'
       (click)="toggleDropDown()" type='text' novalidate>

當你點擊它時,它會顯示一個“下拉”菜單:

<div *ngIf="showDropDown"
           class="search-bar-results">
        <li
          *ngFor="let x of searchItems | filter: getSearchValue()"
          (click)="selectValue(artist)">
            <img src="{{x.image}}"
                 alt="search result artist image"
                 class="search-bar-image">
            <p>{{x.name}}</p>
            <p>{{x.type}}</p>
        </li>
      </div>

這是打字稿:

showDropDown = false;

toggleDropDown() {
    this.showDropDown = !this.showDropDown;
    console.log('clicked');
  }

當用戶點擊輸入時,下拉菜單會出現在 DOM / 屏幕上。 到目前為止,我只能通過單擊輸入本身來關閉下拉菜單,但我試圖找到一種通過單擊其他位置來關閉菜單的方法。

參考blurblur Angular 2

與此相符的事情:

<input id='search'placeholder="Search" formControlName='search'
   (click)="toggleDropDown()" (blur)="closeDropDown()" type='text' novalidate>

TS:

closeDropDown() {
    this.showDropDown = false;
    console.log('clicked outside');
}

您可以執行以下操作:

1)在“@Component”裝飾器中添加主機:

  host: {
    "(window:click)": "onDropClick()"
  }

2)添加您在主機上調用的函數:

  onDropClick() { // close drop down
    this.YOUR-DROP-DOWN-NAME = false;
  }

3) 停止傳播你的 drop 事件:

  onSearchDrop(event) { // YOUR DROP DOWN FUNCTION
    event.stopPropagation(); // Drop down propagation
  }

例子:

@Component({
  selector: 'app-search-page',
  templateUrl: './search-page.component.html',
  styleUrls: ['./search-page.component.scss'],

  host: {
    "(window:click)": "onDropClick()"
  }

})
export class SearchPageComponent implements OnInit {
  searchDrop = false;

  constructor() { }

  ngOnInit() {
  }

  onSearchDrop(event) {
    this.searchDrop = true;
    this.modalDrop = false;

    event.stopPropagation(); // Drop down propagation
  }


  onDropClick() { // close drop down
    this.searchDrop = false;
  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM