我正在使用要创建的组件中的角度组件。我无法修改正在使用的组件(DogstarComponent)。它的输入值“ Alive”可以设置为true或false。但是,我的html中有多个DogstarComponents,只想修改我单击的那一个的“活动”输入值。最好的方法是什么?请参见下面的示例伪代码。
DogstarComponent.ts
import { Component, Input } from '@angular/core';
@Component({
selector: 'dogstar-selector',
template: `
<another-Component class="test" [alive]="alive" header="{{title}}">
<ng-content></ng-content>
</another-Component>
`
})
export class DogstarComponent {
//Title
@Input() title: string;
//alive
@Input() alive: boolean = false;
}
dogstar-selector用于完全不同的组件(太空飞船)HTML
spaceship.component.html
<dogstar-selector (click)="changeAliveValue();" [alive]="true" [title]="test"">
<p> information </p>
</dogstar-selector>
spaceship.component.ts
@Component({
selector: 'spaceship',
templateUrl: './spaceship.component.html',
styleUrls: ['./spaceship.component.css']
})
@Injectable()
export class SpaceshipComponent implements OnInit {
.......
changeAliveValue()
{
//How do I change the input value of [alive]?
}
答案 0 :(得分:0)
据我所知,更好的方法是使用服务进行数据共享,并从这些组件中使用该服务。以下示例示例实际上并非来自您的输入
import {
Injectable
} from '@angular/core';
@Injectable()
export class StorageService {
public entity: Array < any > | boolean = false;
constructor() {}
public getData(): Array < any > | boolean {
return this.entity;
}
public setData(entity: any): void {
this.entity = entity;
}
}
答案 1 :(得分:0)
如果* ngFor下有组件,则应按以下步骤
spaceship.component.html
<dogstar-selector *ngFor="let index of list" (click)="changeAliveValue(index);" [alive]="selectedindex===index" [title]="test"">
</dogstar-selector>
spaceship.component.ts
selectedindex:number = -1;
changeAliveValue(index)
{
this.selectedindex = index;
}
答案 2 :(得分:0)
如果您尝试仅更改一个Dogstar组件的活动值,则只需在该组件中执行。
dogstar.component.ts
import { Component, Input } from '@angular/core';
@Component({
selector: 'dogstar-selector',
template: `
<another-Component class="test" [alive]="alive" header="{{title}}">
<ng-content></ng-content>
</another-Component>
`
})
export class DogstarComponent {
//Title
@Input() title: string;
//alive
@Input() alive: boolean = false;
changeAliveValue()
{
this.alive = !this.alive
}
}
然后在您的dogstar.component.html
包括:(click)="changeAlivevalue()"
作为被单击的HTML元素的属性。
答案 3 :(得分:0)
您可以使用ViewChildren
来保留alive
变量。如何使用ngFor(如Pranay显示)显示组件,或者只是单独插入标签...这里只是单独插入标签:
<dogstar-selector (click)="changeAliveValue(0);" [alive]="true"> ...
<dogstar-selector (click)="changeAliveValue(1);" [alive]="true"> ...
<dogstar-selector (click)="changeAliveValue(2);" [alive]="true"> ...
我们传递“索引”以了解要更改的组件变量。
在您的父组件中,导入ViewChildren
和QueryList
并标记:
@ViewChildren(DogstarComponent) comps: QueryList<DogstarComponent>;
changeAliveValue(index) {
// here we target the component chosen and toggle alive value
this.comps.toArray()[index]['alive'] = false;
}
这是一个 StackBlitz