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 学习笔记 选择器之六
Jul 23 Javascript
js使用removeChild方法动态删除div元素
Aug 01 Javascript
用原生JS对AJAX做简单封装的实例代码
Jul 13 Javascript
js实现常用排序算法
Aug 09 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
Sep 05 Javascript
Bootstrap基本样式学习笔记之表格(2)
Dec 07 Javascript
JS优化与惰性载入函数实例分析
Apr 06 Javascript
详解javascript 变量提升(Hoisting)
Mar 12 Javascript
微信小程序使用npm包的方法步骤
Aug 13 Javascript
解决layui checkbox 提交多个值的问题
Sep 02 Javascript
微信小程序获取地理位置及经纬度授权代码实例
Sep 18 Javascript
JavaScript的console命令使用实例
Dec 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
DOMXML函数笔记
2006/10/09 PHP
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
PHP文件缓存内容保存格式实例分析
2014/08/20 PHP
php防止sql注入简单分析
2015/03/18 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
js实现简单选项卡功能
2020/03/23 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
使用jquery Ajax实现上传附件功能
2018/10/23 jQuery
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
js实现图片实时时钟
2020/01/15 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
综合素质的自我鉴定
2013/10/07 职场文书
矿泉水广告词
2014/03/20 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
毕业论文评语大全
2014/04/29 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
违纪检讨书范文
2015/01/27 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
借条如何写
2015/05/26 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
Python实现视频自动打码的示例代码
2022/04/08 Python