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 相关文章推荐
仿中关村在线首页弹出式广告插件(jQuery版)
May 03 Javascript
jquery div 居中技巧应用介绍
Nov 24 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
Sep 03 Javascript
jQuery标签编辑插件Tagit使用指南
Apr 21 Javascript
jQuery增加自定义函数的方法
Jul 18 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
Dec 14 Javascript
对称加密与非对称加密优缺点详解
Feb 06 Javascript
jquery操作ul的一些操作笔记整理(干货)
Aug 31 jQuery
基于express中路由规则及获取请求参数的方法
Mar 12 Javascript
Vue表单及表单绑定方法
Sep 04 Javascript
vue无限轮播插件代码实例
May 10 Javascript
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
Apr 13 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下打开URL地址的几种方法小结
2010/05/16 PHP
php 购物车完整实现代码
2014/06/05 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
JS 文件大小判断的实现代码
2010/04/07 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
python监控网卡流量并使用graphite绘图的示例
2014/04/27 Python
python实现数据图表
2017/07/29 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
numpy库reshape用法详解
2020/04/19 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
《唯一的听众》教学反思
2014/02/20 职场文书
出生公证书样本
2014/04/04 职场文书
给校长的一封检讨书
2014/09/20 职场文书
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏
vue动态绑定style样式
2022/04/20 Vue.js