【问题标题】:boolean value doesn't change after a function is called whenever a button is clicked每当单击按钮时调用函数后,布尔值都不会改变
【发布时间】:2019-10-10 00:01:34
【问题描述】:

我有两个角度组件,如果单击第一个中的搜索按钮,则必须显示其中一个。但不幸的是,我所做的代码不起作用,只有当我手动更改布尔值“点击”时才起作用。 任何人都可以帮助我吗?

我的组件的结构是这样的:

src
 |app
   |components
      |FilterBarComponent
      |LogTableComponent

FilterBarComponent中搜索按钮的代码:

<button class="btn-search text-center"  (click)="buttonStatus = 
!buttonStatus">Search</button>

FilterBarComponenet.ts:

export class FilterBarComponent implements OnInit {
  buttonStatus: boolean;

  constructor(private logsService: HttpClientTestService) {
    this.buttonStatus = false;
  }

LogsTableComponent.ts:

import { Component, OnInit } from '@angular/core';
import { FilterBarComponent } from './../filter-bar/filter-bar.component';

@Component({
  selector: 'app-logs-table',
  templateUrl: './logs-table.component.html',
  styleUrls: ['./logs-table.component.css']
})
export class LogsTableComponent implements OnInit {
  clicked: boolean;
  constructor(private filterBar: FilterBarComponent) { }


  ngOnInit() {
  }

  getButtonStatus() {
    this.clicked = this.filterBar.buttonStatus;
  }

}

LogsTableComponent.html:

<div class="container-fluid p-2" *ngIf="clicked">

【问题讨论】:

  • 你的 getButtonStatus() 既没有被调用也没有监听变化,考虑使用 observables。
  • 我已经读过你的文章(顺便说一句很好),但它总是关于父/子组件,有没有任何通信方式可以在同一结构级别的两个组件之间共享数据?

标签: angular function button click components


【解决方案1】:

我在您的代码中的任何地方都没有看到函数getButtonStatus 被调用。可能就是这个问题。我猜你需要在ngOnInit 中调用它。 此外,您正在通过构造函数将一个组件注入另一个组件。这在角度上不起作用,您应该通过服务。

【讨论】:

    【解决方案2】:

    我有一个结构:

    `-App Component
     -Log Table Component
     -Filter Bar Component`
    

    一个App Component负责Log和Filter Component之间的通信

    app.component.ts

    `export class AppComponent {
       public clickedEvent: boolean;
    
       childEventClicked(event: boolean) {
         this.clickedEvent = event;
       }
    }`
    

    app.component.html

    `<div style="text-align:center">
      <app-filter-bar (eventClicked)="childEventClicked($event)"></app-filter-bar>
      <app-log-table [clicked]="clickedEvent"></app-log-table>
    </div>`
    

    filter-bar.component.ts

    `export class FilterBarComponent implements OnInit {
      public buttonStatus: boolean = false;
      @Output() eventClicked: EventEmitter<boolean> = new EventEmitter<boolean>();
    
      constructor() { }
    
      ngOnInit() {
      }
    
      onClick(event: boolean): void {
        this.buttonStatus = !event;
        this.eventClicked.emit(this.buttonStatus);
      }
    }`
    

    filter-bar.component.html

    <button class="btn-search text-center" (click)="onClick(buttonStatus)"> button status: {{buttonStatus}} </button>

    log-table.component.ts

    export class LogTableComponent implements OnInit {
      @Input() clicked: boolean;
    
      constructor() { }
    
      ngOnInit() {
      }
    }
    

    log-table.component.html

    <div class="container-fluid p-2" *ngIf="clicked">Test</div>
    

    检查这个答案

    【讨论】:

    • 非常感谢您挽救了我的一天,我为此苦苦挣扎,每个人都告诉我您无法在具有相同结构级别的两个组件之间共享数据。再次感谢您的宝贵时间
    • @Boha 也许您没有正确阅读文档;|
    • @Vikas 可能是,我被时间压着 :)
    猜你喜欢
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多