如何在组件

时间:2018-02-06 14:39:17

标签: angular typescript command-line-interface

我是Angular的新手,目前正在使用Angular 5 Cli和VS Code。我有2x组件(Comp1和Comp2)需要访问相同的变量,最终是一个字符串。此变量在第3个组件(Comp 3)视图/ HTML模板中呈现。

访问此内容的最佳方法是什么? 以下示例文件:

Comp3.html

<a routerLink="/{{modeName | lowercase}}" class="mode"><span class="icon {{modeName | lowercase}}"></span><span>{{modeName}}</span></a>

Comp3.ts

import { Component } from '@angular/core';
import { LowerCasePipe } from '@angular/common';

@Component({
selector: 'pm-nav-button',
templateUrl: './comp3.component.html'
})

export class Comp3 {

constructor() {}

modeName: string;


}

Comp2.ts&amp; Comp1.ts - (这些是基于Angular Routing配置的,无论哪个视图加载它都会设置&#39; Grid&#39;模式或&#39; List&#39;模式)

import { Component, OnInit } from '@angular/core';
import { LowerCasePipe } from '@angular/common';
import { Comp3 } from './comp3-component';

@Component({
selector: 'content-two',
templateUrl: './comp3.component.html'
})

export class Comp2 implements OnInit {

constructor(private _comp3: Comp3) {}


ngOnInit(): void {
    this._Comp3.modeName = 'Grid';
}



}

然而,这一切都很好,没有任何错误,但我没有看到&#39; Grid&#39;绑定到模板的绑定(插值)。我想我在模板渲染后设置变量,即使我在ngOnInit中设置它。我希望能够从其他组件访问,检查和设置此变量。我该怎么做呢?感谢

1 个答案:

答案 0 :(得分:1)

在缺少直接连接的组件(例如兄弟姐妹,孙子等)之间传递数据时,您应该使用共享服务。

您可以尝试以下代码段。

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class SharedService {
  private messageSource = new BehaviorSubject<string>("list");
  currentMessage = this.messageSource.asObservable();
  constructor() { }
  changeMessage(message: string) {
    this.messageSource.next(message)

  }
}

//器Comp1

import { Component, OnInit } from '@angular/core';
import {SharedService} from '../shared.service';
@Component({
  selector: 'app-comp1',
  templateUrl: './comp1.component.html',
  styleUrls: ['./comp1.component.css']
})
export class Comp1Component implements OnInit {

   message:string;
  constructor(private data: SharedService) {

   }
  ngOnInit() {
    this.data.currentMessage.subscribe(message => this.message = message)
    console.log(this.message);
  }

}

//器Comp2

import { Component, OnInit } from '@angular/core';
import {SharedService} from '../shared.service';
@Component({
  selector: 'app-comp2',
  templateUrl: './comp2.component.html',
  styleUrls: ['./comp2.component.css']
})
export class Comp2Component implements OnInit {

    message:string;
  constructor(private data: SharedService) { }
  ngOnInit() {
    this.data.currentMessage.subscribe(message => this.message = message)
    console.log(this.message);
  }

}