Javascript Angular 2隐藏用户未选中的文本区域
在Javascript Angular 2隐藏用户未选中的文本区域,javascript,html,angular,checkbox,Javascript,Html,Angular,Checkbox,在*ngFor中呈现textarea时,如果取消选中复选框,如何隐藏textarea?所以复选框应该与文本区域绑定,对吗?它应该只隐藏用户未选中的textarea,其他人应该保持可见 我一直在试图找出最简单的方法,但在我的实际代码中,如果框中有勾选,则返回我true,如果框中没有勾选,则返回我false,但是它根本没有隐藏textarea。默认值为true,因此它将所有文本区域显示为默认值 出于某种原因,这个plnkr不允许我使用[(ngMode)]我认为它是一个不同的角度RC,但下面的例子基本
*ngFor
中呈现textarea
时,如果取消选中复选框,如何隐藏textarea
?所以复选框应该与文本区域绑定,对吗?它应该只隐藏用户未选中的textarea
,其他人应该保持可见
我一直在试图找出最简单的方法,但在我的实际代码中,如果框中有勾选,则返回我true
,如果框中没有勾选,则返回我false
,但是它根本没有隐藏textarea
。默认值为true,因此它将所有文本区域显示为默认值
出于某种原因,这个plnkr不允许我使用[(ngMode)]
我认为它是一个不同的角度RC,但下面的例子基本上是我的问题,当你取消选中框时,它不会隐藏文本区域
我的原始代码:
<label for="inputSearch.name" style="float: left;">
<input type="checkbox" id="{{inputSearch.name}}" [checked]="chkProp" (click)="chkboxCookie()" [(ngModel)]="inputSearch.value"> {{inputSearch.name}}
</label>
<div class="" *ngFor="let inputSearch of searchBoxCount" class="col-sm-12">
<textarea name="{{inputSearch.name}}" id="{{inputSearch.name}}" rows="3" class="search-area-txt" attr.placeholder="Search {{inputSearch.name}}" [(ngModel)]="inputSearch.value" *ngIf="chkProp || chkProp==true || inputSearch.name"></textarea>
<p> {{inputSearch.name}} - {{inputSearch.value}}</p>
</div>
{{inputSearch.name}
{{inputSearch.name}-{{inputSearch.value}
但是,您将遇到一个问题,它将隐藏所有文本区域。你需要使用一些独特的东西来保存它们各自的状态。试试这段代码,它会对你有用的
选中并取消选中复选框
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
styles: [`
.hidden {
display: none;
}
`],
template: `<p *ngFor="let user of users">{{ user.name }} - {{ user.age }} </p>
<div *ngFor="let user of users">
<textarea name="{{user.name}}" id="{{ user.name }}" [class.hidden]="chkState"> </textarea>
<input type="checkbox" id="{{ user.name }}" [checked]="chkState" (click)="change()"/>
<p>{{user.name}}</p>
</div>
`
})
export class AppComponent {
public users: string;
public chkState = true;
change(): void {
this.chkState = !this.chkState;
}
constructor() {
this.users = [{name: 'User1', age: '21'}, {name:'User2', age:'31'}];
}
}
从'@angular/core'导入{Component};
@组成部分({
选择器:“我的应用程序”,
风格:[`
.隐藏{
显示:无;
}
`],
模板:`{{user.name}-{{user.age}
{{user.name}
`
})
导出类AppComponent{
公共用户:字符串;
公共chkState=true;
change():void{
this.chkState=!this.chkState;
}
构造函数(){
this.users=[{name:'User1',age:'21'},{name:'User2',age:'31'}];
}
}
使用一个checkedUsers
数组,如果在数组中找不到用户,则将复选框设置为选中。然后,如果在数组中找到用户
,则隐藏文本区域
然后,在复选框change
上,将用户
传递给该更改,如果该用户不在checkedUsers
数组中,则添加该用户,如果该用户已经在该数组中,则将其删除
下面是组件的外观。但是,每个用户上的名称必须是唯一的,否则将添加某种类型的id
属性。另外,我在checkedUsers
数组中使用JSON.stringify
,并将其放入localStorage
中,因此如果该值过大,将影响性能,但无论如何都应该使用db
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'my-app',
styles: [`
.hidden {
display: none;
}
`],
template: `<p *ngFor="let user of users">{{ user.name }} - {{ user.age }} </p>
<div *ngFor="let user of users">
<textarea name="{{user.name}}" id="{{ user.name }}" [class.hidden]="checkedUsers.indexOf(user) >= 0"></textarea>
<input type="checkbox" id="{{ user.name }}" [checked]="checkedUsers.indexOf(user) < 0" (click)="change(user)"/>
<p>{{user.name}}</p>
</div>
`
})
export class AppComponent implements OnInit {
public users: string;
public checkedUsers = [];
constructor() {
}
ngOnInit() {
this.users = [{name: 'User1', age: '21'}, {name:'User2', age:'31'}];
this.checkedUsers = JSON.parse(localStorage.getItem("checkedUsers"));
if(this.checkedUsers === null) {
this.checkedUsers = [];
} else {
for(var i = 0; i < this.checkedUsers.length; i++) {
var currCheckedUser = this.checkedUsers[i];
for(var x = 0 ; x < this.users.length ; x++) {
var currUser = this.users[x];
if(currCheckedUser.name === currUser.name) {
this.checkedUsers.splice(i, 1);
this.checkedUsers.push(currUser);
}
}
}
}
}
change(user): void {
var indexOfItem = this.checkedUsers.indexOf(user);
if(indexOfItem >= 0) {
this.checkedUsers.splice(indexOfItem, 1);
} else {
this.checkedUsers.push(user);
}
localStorage.setItem("checkedUsers", JSON.stringify(this.checkedUsers));
}
}
从'@angular/core'导入{Component,OnInit};
@组成部分({
选择器:“我的应用程序”,
风格:[`
.隐藏{
显示:无;
}
`],
模板:`{{user.name}-{{user.age}
{{user.name}
`
})
导出类AppComponent实现OnInit{
公共用户:字符串;
公开检查用户=[];
构造函数(){
}
恩戈尼尼特(){
this.users=[{name:'User1',age:'21'},{name:'User2',age:'31'}];
this.checkedUsers=JSON.parse(localStorage.getItem(“checkedUsers”);
if(this.checkedUsers===null){
this.checkedUsers=[];
}否则{
对于(var i=0;i=0){
此.检查用户.拼接(indexOfItem,1);
}否则{
this.checkedUsers.push(用户);
}
setItem(“checkedUsers”,JSON.stringify(this.checkedUsers));
}
}
这个想法只是隐藏您未选中的文本区域,我想这就是为什么我尝试使用user.name
作为ngModel
,因为每个用户都有唯一的名称,但是plnkr不允许我使用[(ngModel)]
您能举个例子说明我还能如何实现它吗?因此,它将只隐藏用户未选中的文本区域。这是隐藏并显示所有文本区域,它只想隐藏我未选中的文本区域。因此,如果我未选中User1
,它应该隐藏相对于User1
的文本区域。是的,但这正好相反。假设文本区域默认为true
,因此所有内容都是可见的,那么如果我未选中User1
,则应该隐藏但User2
应该保持可见,如果两者都未选中,则如果两者都选中,则两者都应该隐藏或可见。@n若要确定,请检查对帖子和更新的plunker所做的编辑。我使用一个选中的用户数组
,如果他们选中该复选框,我将用户
推入数组,然后在文本区域
上,如果在数组中找到用户
,则它是隐藏的
!非常感谢。如果你在附近,我就请你喝杯啤酒。哈哈,谢谢你的提议,但是投票结果和接受的答案都很好!我很乐意帮忙!假设名称
是唯一的,因为没有其他唯一标识符。我已经更新了PLUNKER和post以使用localStorage进行保存。抱歉花了这么长时间,有点复杂
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'my-app',
styles: [`
.hidden {
display: none;
}
`],
template: `<p *ngFor="let user of users">{{ user.name }} - {{ user.age }} </p>
<div *ngFor="let user of users">
<textarea name="{{user.name}}" id="{{ user.name }}" [class.hidden]="checkedUsers.indexOf(user) >= 0"></textarea>
<input type="checkbox" id="{{ user.name }}" [checked]="checkedUsers.indexOf(user) < 0" (click)="change(user)"/>
<p>{{user.name}}</p>
</div>
`
})
export class AppComponent implements OnInit {
public users: string;
public checkedUsers = [];
constructor() {
}
ngOnInit() {
this.users = [{name: 'User1', age: '21'}, {name:'User2', age:'31'}];
this.checkedUsers = JSON.parse(localStorage.getItem("checkedUsers"));
if(this.checkedUsers === null) {
this.checkedUsers = [];
} else {
for(var i = 0; i < this.checkedUsers.length; i++) {
var currCheckedUser = this.checkedUsers[i];
for(var x = 0 ; x < this.users.length ; x++) {
var currUser = this.users[x];
if(currCheckedUser.name === currUser.name) {
this.checkedUsers.splice(i, 1);
this.checkedUsers.push(currUser);
}
}
}
}
}
change(user): void {
var indexOfItem = this.checkedUsers.indexOf(user);
if(indexOfItem >= 0) {
this.checkedUsers.splice(indexOfItem, 1);
} else {
this.checkedUsers.push(user);
}
localStorage.setItem("checkedUsers", JSON.stringify(this.checkedUsers));
}
}