Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何在另一个组件中调用一个组件的函数_Angular_Typescript - Fatal编程技术网

Angular 如何在另一个组件中调用一个组件的函数

Angular 如何在另一个组件中调用一个组件的函数,angular,typescript,Angular,Typescript,我有两个组件navbar和login,我想在登录组件中调用navbar中的一个函数,到目前为止我尝试了这个,但没有成功。。。。。。 我的导航栏 import {Component, OnInit} from '@angular/core'; @Component({ selector: 'header-Navbar', templateUrl: './app/navbar/navbar.html', }) export class Navbar implements OnIni

我有两个组件navbar和login,我想在登录组件中调用navbar中的一个函数,到目前为止我尝试了这个,但没有成功。。。。。。 我的导航栏

import {Component, OnInit} from '@angular/core';

@Component({
    selector: 'header-Navbar',
    templateUrl: './app/navbar/navbar.html',
})
export class Navbar implements OnInit  {

    constructor(public router: Router) {

    } 
    get(){
         if (this.user == null) {
            this.showstartupbuttons = true;
            this.showsicons = false;
        }
        else {
            this.username = this.user.username;
            this.showsicons = true;
            this.showstartupbuttons = false; 
        }
    }
我的login.ts

import {Component, OnInit} from '@angular/core';
@Component({
    templateUrl: './app/login/login.html',
    providers:[Navbar]
})
export class Login implements onInit{
    ckeditorContent:any;
    constructor(public navbar:Navbar) {}
      ngOnInit(){
           this.navbar.get();
      }

我使用了提供者,但我不确定这些过程。有人能提供帮助吗。

您可以使用服务进行这样的组件交互

import { Subject }    from 'rxjs/Subject';
import { Injectable } from '@angular/core';

@Injectable()
export class NavbarService{
    private getSource = new Subject<any>();
    get$ = this.getSource.asObservable();

    triggerNavbarGet(){
        this.getSource.next(null);
    }
}
您可以在登录组件上触发此函数,如

constructor(public navbar:Navbar, private navbarService: NavbarService) {}
      ngOnInit(){
           this.navbarService.triggerNavbarGet();
      }

关于组件交互的更多信息。

但我不能将@injectable()保留到我的navbar组件中,因为它是一个组件。您只需要将
@injectable()
添加到服务中。不要将其添加到组件中。您还可以删除登录组件上的
提供者:[Navbar]
。我的解决方案不需要它。实际上,我的导航栏是一个组件,要在我的登录中使用它。我必须将@Injectable添加到它,但它是一个组件……还有其他方法吗?我知道你的导航栏是一个组件。你应该为它创建一个服务。在我的回答中,我为您创建了一个名为NavbarService的服务。请阅读我答案末尾的文档。请参阅我的问题-它的调用属性,但您可以用相同的方式调用函数。不幸的是,我陷入了一个没有解决的问题。也许你知道
constructor(public navbar:Navbar, private navbarService: NavbarService) {}
      ngOnInit(){
           this.navbarService.triggerNavbarGet();
      }