Angular将填入表单的数据渲染到表格的方法


Posted in Javascript onSeptember 22, 2017

一、项目简介

我们将采用Angular框架来做一个demo,这个demo将要实现的功能如下:

Angular将填入表单的数据渲染到表格的方法

在X坐标和Y坐标文本框输入信息,然后点击添加,就会在下面表格 中出现一项相应的数据,点击每一项旁边的删除按钮,该条信息就会被删除!

因为我们的表格数据是经常刷新的,所以我们把它独立出来作为一个组件。

二、项目目录

--------app

----------dataTable(文件夹)

------------dataTable.component.html

------------dataTable.component.css

------------dataTable.component.ts

----------app.component.html

----------app.component.css

----------app.component.ts

----------app.module.ts

三、代码讲解

1.app.component.html

我们先把主体框架写好

<div class="container">
 <div class="row">
  <form>
   <div class="form-group">
    <label for="exampleInputEmail1">X坐标</label>
    <input type="text" class="form-control" id="exampleInputEmail1" placeholder="xcood" name="xcood">
   </div>
   <div class="form-group">
    <label for="exampleInputPassword1">Y坐标</label>
    <input type="text" class="form-control" id="exampleInputPassword1" placeholder="ycood" name="ycood">
   </div>
   <button type="button" class="btn btn-default" (click)="additem()">添加</button>
  </form>  
 </div>
 <div class="row">
  <data-table [array]="addArray"></data-table><!--导入dataTable组件,并且将父组件里面的form表单数据传递给子组件渲染-->
 </div>
</div>

这里使用了ngx-bootstrap,文末我们再讲解一下如何导入这个东西。

2.app.component.ts

我们再父组件需要用到一个添加功能的additem()方法

import { Component } from '@angular/core';

@Component({
 selector: 'app-root',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.css']
})
export class AppComponent {
 addArray=[];
 xcood: any;
 ycood: any;

 additem(){
  this.xcood = (document.getElementsByName('xcood')[0] as HTMLInputElement).value;
  this.ycood = (document.getElementsByName('ycood')[0] as HTMLInputElement).value;
  this.addArray.push({
   xcood:this.xcood,
   ycood:this.ycood
  })
 }
}

在这里面,如果我们不定义

xcood: any;

ycood: any;

的话,那么将会出现如下错误

我们没有声明就直接初始化他们了,肯定会出错,要记住一件事,要用到什么变量,首先要先声明它,再去给它初始化。

在additem()函数里面,我们要初始化这两个变量了,记住要用this,否则获取不到全局作用域声明的变量。因为我们是点击添加按钮再去获取form表单里面的数据,所以在逻辑上我们要把获取的步骤放在additem()函数里面。这里还有一个新的写法,因为之前我直接用

this.xcood = document.getElementsByName('xcood')[0].value;是获取不到数据的,

所以我在网上找了一下,替换成了上面那种写法。

我们在一开始就声明了一个addArray的数组,这个数组即将存放的是一条一条的数据对象,在additem()函数里面每调用一次就把获取到的数据push给这个数组。

接下来我们就要在子组件接收这个数组,并且渲染到表格上。

3.dataTable.component.html

<table class="table table-striped">
 <thead>
  <tr>
   <th>X坐标</th>
   <th>Y坐标</th>
   <th>操作</th>
  </tr>
 </thead>
 <tbody *ngIf="array.length!==0"><!--这里我们判断一下传递过来的数组是否为空,如果是空的话我们就没有必要渲染出来了-->
  <tr *ngFor="let data of array">
   <td>{{data.xcood}}</td>
   <td>{{data.ycood}}</td>
   <td><button type="button" class="btn btn-default" (click)="delete(data)">删除</button></td>
  </tr>
 </tbody>
</table>

4.dataTable.component.ts

import { Component,Input } from '@angular/core';

@Component({
 selector: 'data-table',
 templateUrl: './dataTable.component.html',
 styleUrls: ['./dataTable.component.css']
})
export class DataTableComponent {
  @Input() array:any;//接收父组件传递过来的addArray数组
  index: number;   //跟上面说的一样要先声明
  delete(data){
    this.index = this.array.indexOf(data);
    if (this.index > -1) {
      this.array.splice(this.index, 1);//跟上面说的一样在初始化的时候要用到this
      }
  }
}

我们接下来给删除按钮的函数delete()编写逻辑,我们要的效果是点击哪一条就删除哪一条,所以我们要先获取到你要删除的这条数据对象,然后在父组件传递过来数组里面查找到这条数据对象的位置,再用splice()函数删除。

5.app.module.ts

记得要在app.module.ts里面注册你新建的dataTable组件

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { DataTableComponent } from './dataTable/dataTable.component';

@NgModule({
 declarations: [
  AppComponent,
  DataTableComponent
 ],
 imports: [
  BrowserModule
 ],
 providers: [],
 bootstrap: [AppComponent]
})
export class AppModule { }

四、ngx-bootstrap的导入

其实很简单,需要先在cmd输入 cnpm install ngx-bootstrap --save在当前目录下安装该模块

然后在项目最后的出口html文件里面加入

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

最后直接可以在你编写样式的时候使用了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 解决“options为空或不是对象”
Dec 22 Javascript
jquery加载页面的方法(页面加载完成就执行)
Jun 21 Javascript
cument.execCommand()用法深入理解
Dec 04 Javascript
jQuery中:checked选择器用法实例
Jan 04 Javascript
js实现防止被iframe的方法
Jul 03 Javascript
浅谈JsonObject中的key-value数据解析排序问题
Dec 06 Javascript
浅析JS抽象工厂模式
Dec 14 Javascript
p5.js入门教程和基本形状绘制
Mar 15 Javascript
在vue中使用公共过滤器filter的方法
Jun 26 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
Dec 30 jQuery
解决ant Design中Select设置initialValue时的大坑
Oct 29 Javascript
代码解析React中setState同步和异步问题
Jun 03 Javascript
详解在express站点中使用ejs模板引擎
Sep 21 #Javascript
vue router学习之动态路由和嵌套路由详解
Sep 21 #Javascript
vue-router 权限控制的示例代码
Sep 21 #Javascript
react router 4.0以上的路由应用详解
Sep 21 #Javascript
详解10分钟学会vue滚动行为
Sep 21 #Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
Sep 21 #jQuery
JavaScript实现简单生成随机颜色的方法
Sep 21 #Javascript
You might like
php动态生成JavaScript代码
2009/03/09 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
React中的render何时执行过程
2018/04/13 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
pyside写ui界面入门示例
2014/01/22 Python
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
Django的数据模型访问多对多键值的方法
2015/07/21 Python
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
numpy返回array中元素的index方法
2018/06/27 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
python集合常见运算案例解析
2019/10/17 Python
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
自行车广告词大全
2014/03/21 职场文书
《蚕姑娘》教学反思
2014/04/15 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书