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 相关文章推荐
Javascript实现CheckBox的全选与取消全选的代码
Jul 20 Javascript
javascript开发随笔一 preventDefault的必要
Nov 25 Javascript
原生js 秒表实现代码
Jul 24 Javascript
js克隆对象、数组的常用方法介绍
Sep 26 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
Jun 12 Javascript
JS及PHP代码编写八大排序算法
Jul 12 Javascript
JavaScript中数组的22种方法必学(推荐)
Jul 20 Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 Javascript
jquery.multiselect多选下拉框实现代码
Nov 11 Javascript
基于js 各种排序方法和sort方法的区别(详解)
Jan 03 Javascript
layui table去掉右侧滑动条的实现方法
Sep 05 Javascript
JS实现扫雷项目总结
May 19 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 购物车的例子
2009/05/04 PHP
php cli配置文件问题分析
2015/10/15 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
javascript中attachEvent用法实例分析
2015/05/14 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
简单实现python收发邮件功能
2018/01/05 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
Python装饰器用法与知识点小结
2020/03/09 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
python中如何设置代码自动提示
2020/07/15 Python
python+requests接口自动化框架的实现
2020/08/31 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
利达恒信公司.NET笔试题面试题
2016/03/05 面试题
毕业班联欢会主持词
2014/03/27 职场文书
学校四群教育实施方案
2014/06/12 职场文书
委托函范文
2015/01/29 职场文书
高中教师个人总结
2015/02/10 职场文书
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python