使用 *ngIf Angular2 隐藏/显示
Hide / show with *ngIf Angular2
我有两个要根据 *ngIf
条件值隐藏和显示的元素。
默认情况下,我的 wrap
块是可见的,当我点击其中一个 divs
时,这个 wrap
块应该消失,只有选择的 div's
内容应该是显示在我的 span
元素中。
然后,当我点击我的 span
元素时,它应该会消失,并且 wrap
块应该会再次出现,并带有所有默认内容。
为了实现,我对两个元素都使用了 *ngIf
和值 visability
,期望我的函数按以下方式工作:
wrap - visible;
span - hidden;
wrap - hidden;
span - visible;
这是我的代码:
@Component({
selector: 'my-app',
template: `
<div id="wrap" class="wrap" *ngIf="visability">
<div (click)="clicked($event)">
<h2>Hello {{name}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{year}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{surname}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{country}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{cartoon}}</h2>
</div>
<div class="view">
<span id="span" (click)="showDivs()" *ngIf="visability">{{target}} </span>
</div>
`,
})
export class App {
name:string;
year: string;
surname: string;
country: string;
cartoon: string;
element: any;
target: any;
constructor() {
var wrap = document.getElementById("wrap");
var span = document.getElementById("span");
this.name = 'Angular2'
this.year = '1989'
this.surname = 'Connor'
this.country = 'USA'
this.cartoon = 'Tom & Jerry'
}
clicked(event) {
wrap.visability = false;
span.visability = true;
this.target = event.target.innerText;
}
showDivs(){
span.visability = false;
wrap.visability = true;
}
}
为什么我的函数无法正常工作?
实际上我稍微更改了您的代码。对于第一个 div,将 visability
设为真,将第二个 div 设为假。更好地将它们分开。然后它只是根据点击切换布尔值,如下所示:
首先将可见性声明为变量,以便您可以使用 this
引用它,然后切换可见性。
clicked(event) {
this.visability = false;
this.target = event.target.innerText;
}
和
showDivs(){
this.visability = true;
// span.visability = false; // remove this
// wrap.visability = true; // remove this
}
和 html 相应地:
<div id="wrap" class="wrap" *ngIf="visability">
和
<span id="span" (click)="showDivs()" *ngIf="!visability">{{target}}</span>
这是一个解决方案。
你的plunker
我通过删除第二个元素的 *ngIf
解决了这个问题。我刚刚将 *ngIf="shown" 用于 span
.
然后在构造函数中我设置了两个
visibility = true
和
shown = true
在函数内部,我将值切换为相反的值,从而实现了我想要的结果,尽管我不知道这是否是最好的方法。
@Component({
selector: 'my-app',
template: `
<div id="wrap" class="wrap" *ngIf="visibility">
<div (click)="clicked($event)">
<h2>Hello {{name}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{year}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{surname}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{country}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{cartoon}}</h2>
</div>
</div>
<div class="view">
<span id="span" (click)="showDivs()" *ngIf="shown">{{target}}</span>
</div>
`,
})
export class App {
name:string;
year: string;
surname: string;
country: string;
cartoon: string;
element: any;
target: any;
clicked(event) {
this.target = event.target.innerText;
this.visibility = false;
this.shown = true;
}
showDivs(){
this.shown = false;
this.visibility = true;
}
constructor() {
this.visibility = true;
this.shown = true;
this.name = 'Angular2'
this.year = '1989'
this.surname = 'Connor'
this.country = 'USA'
this.cartoon = 'Tom & Jerry'
}
}
我有两个要根据 *ngIf
条件值隐藏和显示的元素。
默认情况下,我的 wrap
块是可见的,当我点击其中一个 divs
时,这个 wrap
块应该消失,只有选择的 div's
内容应该是显示在我的 span
元素中。
然后,当我点击我的 span
元素时,它应该会消失,并且 wrap
块应该会再次出现,并带有所有默认内容。
为了实现,我对两个元素都使用了 *ngIf
和值 visability
,期望我的函数按以下方式工作:
wrap - visible;
span - hidden;
wrap - hidden;
span - visible;
这是我的代码:
@Component({
selector: 'my-app',
template: `
<div id="wrap" class="wrap" *ngIf="visability">
<div (click)="clicked($event)">
<h2>Hello {{name}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{year}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{surname}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{country}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{cartoon}}</h2>
</div>
<div class="view">
<span id="span" (click)="showDivs()" *ngIf="visability">{{target}} </span>
</div>
`,
})
export class App {
name:string;
year: string;
surname: string;
country: string;
cartoon: string;
element: any;
target: any;
constructor() {
var wrap = document.getElementById("wrap");
var span = document.getElementById("span");
this.name = 'Angular2'
this.year = '1989'
this.surname = 'Connor'
this.country = 'USA'
this.cartoon = 'Tom & Jerry'
}
clicked(event) {
wrap.visability = false;
span.visability = true;
this.target = event.target.innerText;
}
showDivs(){
span.visability = false;
wrap.visability = true;
}
}
为什么我的函数无法正常工作?
实际上我稍微更改了您的代码。对于第一个 div,将 visability
设为真,将第二个 div 设为假。更好地将它们分开。然后它只是根据点击切换布尔值,如下所示:
首先将可见性声明为变量,以便您可以使用 this
引用它,然后切换可见性。
clicked(event) {
this.visability = false;
this.target = event.target.innerText;
}
和
showDivs(){
this.visability = true;
// span.visability = false; // remove this
// wrap.visability = true; // remove this
}
和 html 相应地:
<div id="wrap" class="wrap" *ngIf="visability">
和
<span id="span" (click)="showDivs()" *ngIf="!visability">{{target}}</span>
这是一个解决方案。
你的plunker
我通过删除第二个元素的 *ngIf
解决了这个问题。我刚刚将 *ngIf="shown" 用于 span
.
然后在构造函数中我设置了两个
visibility = true
和
shown = true
在函数内部,我将值切换为相反的值,从而实现了我想要的结果,尽管我不知道这是否是最好的方法。
@Component({
selector: 'my-app',
template: `
<div id="wrap" class="wrap" *ngIf="visibility">
<div (click)="clicked($event)">
<h2>Hello {{name}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{year}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{surname}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{country}}</h2>
</div>
<div (click)="clicked($event)">
<h2>Hello {{cartoon}}</h2>
</div>
</div>
<div class="view">
<span id="span" (click)="showDivs()" *ngIf="shown">{{target}}</span>
</div>
`,
})
export class App {
name:string;
year: string;
surname: string;
country: string;
cartoon: string;
element: any;
target: any;
clicked(event) {
this.target = event.target.innerText;
this.visibility = false;
this.shown = true;
}
showDivs(){
this.shown = false;
this.visibility = true;
}
constructor() {
this.visibility = true;
this.shown = true;
this.name = 'Angular2'
this.year = '1989'
this.surname = 'Connor'
this.country = 'USA'
this.cartoon = 'Tom & Jerry'
}
}