1、通过文本框输入,向数组添加数据

<!-- 通过文本框输入,向数组添加数据 push -->

<input type="text" name="111" [(ngModel)]="username">
<button (click)="addData()">增加</button>
<ul>
<li *ngFor='let item of list'>
{{item}}
</li>
</ul> export class TodolistComponent implements OnInit {
public username:any='';
public list=[]; addData(){
this.list.push(this.username);/*向数组推数据*/
}

}

2、删除数组的数据

<!-- 删除数组的数据 splice -->

<input type="text" name="111" [(ngModel)]="username">
<button (click)="addData()">增加</button>
<ul>
<li *ngFor='let item of list ;let i=index;'>
{{item}} ------ <button (click)='deleteData(i)'>删除</button>
</li>
</ul> export class TodolistComponent implements OnInit {
public username:any='';
public list=[]; addData(){
this.list.push(this.username); /*向数组推数据*/
}
deleteData(aaa){ /* 将索引值i赋给aaa */
this.list.splice(aaa,1); /*删除数组的数据*/
}

}

3、按下键盘回车“Enter”向数组添加数据

具体参照angularcli第四篇(执行事件)

  • 实现的功能:在input框中输入数据,前面是通过按下按钮数据添加到数组中,现在要改成按下回车键:

  • 步骤:

(1)给input增加鼠标监听事件:

通过keyup / keydown监听鼠标是否按下input框(鼠标监听事件keyup / keydown,鼠标按下、抬起增加触发事件)。

(2)怎么知道我们在键盘上按的是哪个键?

通过事件对象 $event,来获取鼠标所监听的对象(即:input)在键盘上按下哪个键。

代码:
<input type="text" [(ngModel)]="username" (keyup)="addData($event)">
<ul>
<li *ngFor='let item of list;let i=index;'>
{{item}} ------ <button (click)='deleteData(i)'>删除</button>
</li>
</ul> export class TodolistComponent implements OnInit {
  public username:any='';
  public list=[];
  addData(e){
/* console.log(e); */
  if (e.keyCode==13) {
  this.list.push(this.username) /* 在input框中输入数据,按下回车键,数据添加到数组中 */
       this.username=''; /* 输入数值回车之后,清空输入框 */
  }
 }

deleteData(aaa){
  this.list.splice(aaa,1); /*删除数组的数据*/
 }
}

3、将数组列表分成“已完成”和“未完成”,通过按钮来转换

  • 实现的功能:点击 “改变状态” 切换数据的状态、点击 “删除” 就删除该条数据。

  • 思路:为每一条数据添加一个状态,值为 “1” 或 “2” ;  再加一个按钮,这个按钮的作用就是改变状态的值;  通过条件判断,状态为1时显示“正在进行”,状态为2时显示“已完成”。
  • 步骤:

(1)定义一个对象,对象里包括数据内容、状态     var obj={ username:this.username , status:1 }

(2)向数组中推入这个对象,将  this.list.push(this.username)  改成   this.list.push(obj); 

(3)HTML中: 将  {{item}}  改成  {{item.username}} 

(4)添加一个button,点击事件改变 status 的值       changeData(bbb) {   this.list[bbb].status=2;  }

(5)在 <li> 标签中添加条件判断语句   *ngIf='status==1'  或者  [hidden]='status==2'  来控制显示和隐藏

注:一个元素上边没法绑定多个模板, <li> 标签上已经绑定了*ngFor,所有这里用 [hidden]。

<label>输入框:</label>
<input type="text" [(ngModel)]="username" (keyup)="addData($event)"> <h2>正在进行:</h2>
<ul>
<li *ngFor='let item of list ;let i=index;' [hidden]='item.status==2'> <!-- status=2时隐藏 -->
<button (click)='changeData(i)'>改变状态</button>
{{item.username}} ----- {{item.status}}
<!-- 获取对象中的username和status -->
<button (click)='deleteData(i)'>删除</button>
</li>
</ul> <h2>已经完成:</h2>
<ul>
<li *ngFor='let item of list ;let i=index;' [hidden]='item.status==1'> <!-- status=1时隐藏 -->
<button (click)='changeData(i)'>改变状态</button>
{{item.username}}-----{{item.status}}
<button (click)='deleteData(i)'>删除</button>
</li>
</ul>
typescript代码:
export class TodolistComponent implements OnInit {
public username:any='';
public list=[]; constructor() { } ngOnInit() {
} addData(e){ var obj={ /* 定义一个对象 */
username:this.username,
status:1
}

if (e.keyCode==13) {
this.list.push(obj); /* 向数组中添加对象obj */
this.username=''; /* 清空输入框 */
}
}
changeData(bbb){ /*改变状态*/
this.list[bbb].status=2;
}
deleteData(aaa){
this.list.splice(aaa,1); /*删除数组的数据*/
}

angularcli 第六篇(todolist 列表)的更多相关文章

  1. 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)

    解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...

  2. 解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions(译)

    解剖SQLSERVER 第六篇  对OrcaMDF的系统测试里避免regressions (译) http://improve.dk/avoiding-regressions-in-orcamdf-b ...

  3. 第六篇 Replication:合并复制-发布

    本篇文章是SQL Server Replication系列的第六篇,详细内容请参考原文. 合并复制,类似于事务复制,包括一个发布服务器,一个分发服务器和一个或多个订阅服务器.每一个发布服务器上可以定义 ...

  4. 第六篇 Integration Services:初级工作流管理

    本篇文章是Integration Services系列的第六篇,详细内容请参考原文. 简介在前几篇文章中,我们关注使用增量加载方式加载数据.在本篇文章,我们将关注使用优先约束管理SSIS控制流中的工作 ...

  5. Python之路【第六篇】:socket

    Python之路[第六篇]:socket   Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字&quo ...

  6. 【Python之旅】第六篇(七):开发简易主机批量管理工具

    [Python之旅]第六篇(七):开发简易主机批量管理工具 python 软件开发 Paramiko模块 批量主机管理 摘要: 通过前面对Paramiko模块的学习与使用,以及Python中多线程与多 ...

  7. ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套

    这是ElasticSearch 2.4 版本系列的第六篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  8. 【译】第六篇 Replication:合并复制-发布

    本篇文章是SQL Server Replication系列的第六篇,详细内容请参考原文. 合并复制,类似于事务复制,包括一个发布服务器,一个分发服务器和一个或多个订阅服务器.每一个发布服务器上可以定义 ...

  9. 【译】第六篇 Integration Services:初级工作流管理

    本篇文章是Integration Services系列的第六篇,详细内容请参考原文. 简介在前几篇文章中,我们关注使用增量加载方式加载数据.在本篇文章,我们将关注使用优先约束管理SSIS控制流中的工作 ...

随机推荐

  1. Indellij IDEA的菜单 File Edit View等主菜单栏不小心删除,恢复的解决办法

    修改以后保存,重启Idea

  2. 利用nvidia-smi 管理和监控NVIDIA GPU设备

    NVIDIA系统管理界面介绍 原文来源:https://developer.nvidia.com/nvidia-system-management-interface NVIDIA系统管理界面(nvi ...

  3. 转 oracle 正则表达式和查询最大文件号 SQL

    ###sample 1 https://www.cnblogs.com/lxl57610/p/8227599.html Oracle使用正则表达式离不开这4个函数: 1.regexp_like 2.r ...

  4. setup_module和teardown_module

    setup_module .teardown_module 每个用例开始和结束调用一次 hasattr() 函数用于判断对象是否包含对应的属性 运行结果如下:

  5. jenkins自动化视频地址

    1.腾讯课堂的视频 http://www.ctnrs.com/study.html 我的课程所有列表 2.百度网盘里面的

  6. Mac home目录下,创建文件夹,修改权限

    http://php-note.com/article/detail/35e782e145a94042923946cb142b5cd1 1.关闭 SIP 2.sudo mount -uw /

  7. [Mobi] 移动端应用技术选型的思考, Native, Flutter, Quasar, React Native

    今天我主要是从开发 **不同产品** 和 **技术力量差别** 两个方面来做一个比较: Native 除了两端的技术力量要求高.花的功夫多,没毛病,看你有没有这个实力. Flutter 通过实现中间层 ...

  8. SecureCRT-登录unix/linux服务器主机的软件

    百度百科说辞: SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件. SecureCRT支持SSH,同时支持Te ...

  9. 简述 高性能Linux服务器 模型架构 设计

    主要从三个方面进行分析: 1.事件处理模式 2.并发模式 一.事件处理模式 1.Reactoor模式 定义: 主线程只负责监听文件描述符上是否有事件发生,有的话立即将该事件通知工作线程,除此之外,主线 ...

  10. 使用SSM搭建一个简单的crud项目

    使用SSM完成增删查改 前端使用到的技术:ajax,json,bootstrap等 完整项目地址:点这里GitHub 项目地址,可以在线访问 这一章节主要搭建SSM的环境. SpringMVC Spr ...