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购物车实现思路及代码(个人感觉不错)
Dec 23 Javascript
jQuery中 prop() attr()使用详解
May 19 Javascript
js限制文本框的输入内容代码分享(3类)
Aug 20 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
三种Node.js写文件的方式
Mar 08 Javascript
JS数组操作之增删改查的简单实现
Aug 21 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
Mar 29 Javascript
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
微信小程序生成海报分享朋友圈的实现方法
May 06 Javascript
基于layPage插件实现两种分页方式浅析
Jul 27 Javascript
详解Angular cli配置过程记录
Nov 07 Javascript
vue实例的选项总结
Jun 09 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
建立动态的WML站点(一)
2006/10/09 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
PHP模拟QQ登录的方法
2015/07/29 PHP
3种方法轻松处理php开发中emoji表情的问题
2016/07/18 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
番茄的表单验证类代码修改版
2008/07/18 Javascript
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
使用python统计文件行数示例分享
2014/02/21 Python
Python Tkinter简单布局实例教程
2014/09/03 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
int在python中的含义以及用法
2019/06/27 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
python序列类型种类详解
2020/02/26 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
日语翻译个人求职的自我评价
2013/10/14 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
银行委托书范本
2014/04/04 职场文书
保安辞职信范文
2015/02/28 职场文书
首次购房证明
2015/06/19 职场文书
高中物理教学反思
2016/02/19 职场文书