angular - 如何从 Angular 中的另一个组件调用方法?

标签 angular typescript angular6

我正在尝试从一个 Angular 组件调用一个方法到另一个组件

这是one.component.ts,它必须检查是否是休息日

  export class CalendarComponent implements OnInit { 
     isDayOfWeekDisabled(dayOfWeek: number): boolean {
       let dateIsDisabled = false;
       const workDay= 
       moment(this.viewDate).startOf('isoWeek').add(dayOfWeek, 'd');
       this.disabledAreas.forEach((item) => {
      if (item.start.isSame(moment(workDay)) && 
      item.end.isSame(moment(workDay.endOf('day')))) {
      dateIsDisabled = true;
  }
});
return dateIsDisabled;

}

another.component.ts;如果 day off = true,它不会显示当天的待办事项:

       filterDateInDisabledArea(): boolean {
         for (const disabledArea of this.disabledAreas) {
             if (isDayOfWeekDisabled()) {
              return false;
             }
           }
            return true;
         }

但我不明白如何在这些组件之间创建连接。

最佳答案

这取决于,如果您在同级之间调用,那么您会将方法抽象为一个服务,两者都将使用:

服务

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class MruanovaService {
  private subject = null;
  data$ = null;

  constructor(private httpClient: HttpClient) {
    this.init();
  }

  init() {
    this.subject = new BehaviorSubject<any>({});
    this.data$ = this.subject.asObservable();
  }

  getProjects(): void {
    const url = 'https://246gg84zg8.execute-api.us-west- 2.amazonaws.com/prod/projects/';
    const headers = new HttpHeaders({ 'Content-Type': 'text/plain; charset=utf-8' });
    const options = { headers: headers };
    const value = this.httpClient.get(url, options); // HTTP GET
    this.subject.next(value);
  }
}

组件

import { Component, OnInit, Output, EventEmitter } from '@angular/core';
import { MruanovaService } from 'src/app/services/Mruanova.service';

@Component({
  selector: 'app-mruanova',
  templateUrl: './mruanova.component.html',
  styleUrls: ['./mruanova.component.scss']
})
export class MruanovaComponent implements OnInit {
  projects = null;

  constructor(public MruanovaService: MruanovaService) {}

  ngOnInit() {
    this.MruanovaService.getProjects();
    this.MruanovaService.data$.subscribe(res => {
      if (res.subscribe) {
        res.subscribe(response => {
          this.projects = response.Items.sort(function (a, b) {
            return parseFloat(a.ID) - parseFloat(b.ID);
          });
        }, r => {
          console.log('ERROR', r);
        });
      }
    });
  }
}

关于angular - 如何从 Angular 中的另一个组件调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54677102/

相关文章:

javascript - 系统对话框 Angular Material

javascript - 如何在 Angular 项目中使用 ng-circle-progress src 代码?

angular 5 : templateRef. createEmbeddedView 不是函数

design-patterns - Angular2 中的装饰/计算数组

css - 如何使 Angular2 中的导航栏突出显示?

Typescript 模板文字类型循环约束

typescript :抽象方法中的装饰器

angular - 刷新 HTML 组件 Angular 6

javascript - 使用 Angular 6 我们如何捕获特定的 div 或页面组件?

c# - 使用 ASP.NET Core 应用程序更改 Angular 中的根