Angular 2在另一个组件上更改组件变量 [英] Angular 2 changing component variables on another component
问题描述
一个组件如何更改另一个组件上的变量.示例:
How can a component change a variable on another component. Example:
我有一个组件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
I have another component which I want to change onMain in my app component main.component.ts
import {AppComponent} from '../app.component';
@Component({
selector: 'main-app',
template: ``
})
export class MainComponent{
constructor() {
this.appComponent = AppComponent;
this.appComponent.onMain = true;
}
}
我希望Hello会消失,但事实并非如此.如何让一个组件更改另一个组件上的值?
I would expect that Hello would disappear, but it doesn't. How can I have one component change the value on another component?
推荐答案
首先,您在两个组件之间没有连接,或者代码中的某些内容不正确.如果您有父/子方案,则可以使用angular2的@Input,@Output
.如果您没有父母/孩子的情况,可以使用angular2的EventEmitter,SharedService
.
使用演示EventEmitter方式
我认为AppComponent
是parentComponent,而MainComponent是子组件.使用angular2
的SharedService & EventEmitter
概念,我可以通过单击属于"MainComponent's视图"的按钮来隐藏视图的AppComponent's
部分.
First of all, you have no connection between two components or maybe something is not correct in your code. If you have parent/child scenario you can use @Input,@Output
of angular2. If you don't have parent/child scenario you can go with EventEmitter,SharedService
of angular2.
Working demo-EventEmitter way
I have considered AppComponent
is a parentComponent and MainComponent as a child component. Using SharedService & EventEmitter
concepts of angular2
, I'm able to hide AppComponent's
part of view by clicking a button which belongs to 'MainComponent's' view.
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,bind,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;
}
}
这篇关于Angular 2在另一个组件上更改组件变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!