加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular 2更改另一个组件上的组件变量

发布时间:2020-12-17 07:55:20 所属栏目:安全 来源:网络整理
导读:组件如何更改另一个组件上的变量.例: 我有一个组件app.component.ts @Component({ selector: 'my-app',template: ` nav *ngIf="onMain == false" Hello /nav `})export class AppComponent{ onMain: Boolean; constructor(){ this.onMain = false; }} 我有
组件如何更改另一个组件上的变量.例:

我有一个组件app.component.ts

@Component({
    selector: 'my-app',template: `
    <nav *ngIf="onMain == false">
       Hello
    </nav>
    `
})

export class AppComponent{
  onMain: Boolean;

  constructor(){
      this.onMain = false;
    }
}

我有另一个组件,我想在我的应用程序组件main.component.ts中更改onMain

import {AppComponent} from '../app.component';

@Component({
    selector: 'main-app',template: ``
})

export class MainComponent{

  constructor() {
      this.appComponent = AppComponent;
      this.appComponent.onMain = true;
    }
}

我希望Hello会消失,但事实并非如此.如何让一个组件更改另一个组件的值?

首先,两个组件之间没有连接,或者代码中的某些内容可能不正确.如果您有父/子场景,可以使用@ Input,@ Output of angular2.如果您没有父/子场景,可以使用RoleE的SharedEmitter,SharedService. Working demo-EventEmitter way
我认为AppComponent是一个parentComponent,MainComponent是一个子组件.使用SharedService&有关angular2的EventEmitter概念,我可以通过单击属于“MainComponent”视图的按钮来隐藏AppComponent的视图部分.

AppComponent.ts

import {Component,bind,CORE_DIRECTIVES,OnInit} from 'angular2/core';
import {MainComponent} from 'src/MainComponent';
import {SharedService} from 'src/shared.service';
@Component({
    selector: 'my-app',directives:[MainComponent],template: `<h1>AppComponent {{onMain}}</h1>
    <div *ngIf="onMain == false">
       Hello
      <br> __________________________________<br>
    </div>

  <main-app></main-app>
    `
})

export class AppComponent implements OnInit {
  onMain: Boolean;

  constructor(ss: SharedService) {
      this.onMain = false;
      this.ss = ss;
    }



    ngOnInit() {
    this.subscription = this.ss.getEmittedValue()
      .subscribe(item => this.onMain=item);
  }

}

MainComponent.ts

import {Component,CORE_DIRECTIVES} from 'angular2/core';
import {SharedService} from 'src/shared.service';
@Component({
    selector: 'main-app',template: `<h1> MainComponent</h1>
    <button (click)="changeName()">Change Name</button>
    `
})

export class MainComponent {



    constructor(ss: SharedService) {
      this.ss = ss;
    }

    changeName() {
      this.ss.change();
    }
}

shared.service.ts

import {Component,Injectable,Input,Output,EventEmitter} from 'angular2/core'


@Injectable()
export class SharedService {
  @Output() fire: EventEmitter<any> = new EventEmitter();

   constructor() {
     console.log('shared service started');
   }

   change() {
    console.log('change started'); 
     this.fire.emit(true);
   }

   getEmittedValue() {
     return this.fire;
   }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读