Angular4 随笔(三)  ——自定义搜索组件

1.简介

  本组件主要是实现了搜索功能,主要是通过父子组件传值实现。

  基本逻辑:

    1.创建一个搜索组件,如:ng g component  search

    2.父组件调用子组件,并向子组件传入基础配置信息,如搜索框默认提示信息等。

    3.搜索组件接收父组件传参,并在模板上进行配置,在html模板上定义点击事件,调用分页子组件自身一个方法

    4.搜索组件定义发射器,当触发搜索按钮的点击事件时,发射通知

    5.父组件模板调用搜索组件处,监听搜索组件发射方法,并调用自身组件方法,接收搜索组件发射携带的数据,执行自身业务逻辑

2.准备工作

  搭建Angular4 环境,可以参考 我的博客 《Angular环境搭建

  在项目中引入bootstrap4

3.代码讲解

  第一步:创建搜索组件

    ng g component search

  第二步:编写搜索组件模板

    

 <form class="form-inline" style="float:right;margin-top:-0.7%;" ngNoForm>
<div class="form-group" class="pull-right">
<label class="sr-only" for="exampleInputAmount"></label>
<div class="input-group" id="search" >
<input type="text" class="form-control" [(ngModel)]="search" id="exampleInputAmount" placeholder="{{placeholder}}" style="height:28px;width:80%;float:right;font-size: 14px;border-radius: 0px;"/>
<div class="input-group-addon" (click)="searchDataByContent()" style="border: solid 1px #e0e0e0;border-left: 0px;padding: 5px;" ><i class="fa fa-search"></i></div>
</div>
</div>
</form>

  说明:

    [(ngModel)]="search",是搜索组件定义一个属性,用来存储搜索框输入的搜索内容;
    placeholder="{{placeholder}}",是搜索组件定义的一个属性,接收父组件传入的值,当搜索组件没有填写值时,默认显示父组件传入的文字;
    searchDataByContent,是搜索组件自定义的一个点击事件,当搜索按钮被点击时候,这个方法被触发,想父组件发射数据;

  第三步:搜索组件ts文件代码,如下:

    

 import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { Station } from '../stationlist/stationlist.component'; @Component({
selector: 'app-search',
templateUrl: './search.component.html',
styleUrls: ['./search.component.css']
})
export class SearchComponent implements OnInit { @Input() placeholder:string; //过滤内容--过滤关键字
@Input() search:string;
//子组件传递给父组件的发射器
@Output() changeStation:EventEmitter<string> = new EventEmitter(); constructor() {
} ngOnInit() { } searchDataByContent(){
this.changeStation.emit(this.search);
} }

  第四步:父组件ts文件中配置传入搜索组件配置项,如:

    

   //搜索内容
private content:string = "";
//搜索组件配置项
private placeholder:string = "请输入用户名称";
//搜索组件字段
private filterField:string = "username";

  说明:可以根据自己的实际需要,通过这种方式,配置配置项

  第五步:父组件html模板调用子组件,代码如下:

    

 <div class="content-box" >
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header" style="line-height: 14px;background-color: #fff;font-size: 14px;">
<i class="glyphicon glyphicon-flag" ></i>用户列表
<app-search [placeholder]="placeholder" (changeStation)="userChange($event)"></app-search>
</div> <div class="card-body" style="font-size:14px;">
<table class="table table-bordered ">
<thead>
<tr>
<th>序号</th>
<th>用户名称</th>
<th>邮箱</th>
<th>上次登录</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody >
<tr *ngFor="let user of users,let i = index;">
<td>{{(currentPage-1)*15+i+1}}</td>
<td>{{user.username}}</td>
<td>{{user.email}}</td>
<td>{{user.lastlogintime * 1000 | date:'yyyy-MM-dd HH:mm:ss'}}</td>
<td><span class="badge badge-success">已启用</span></td>
<td>
<a href="javascript:;" (click)="switchToCheckUser(user)">查看</a>
<a href="javascript:;" (click)="switchToEditUser(user)" style="margin-left:10px;">编辑</a>
<a href="javascript:;" (click)="deleteUser(user)" style="margin-left:10px;">删除</a>
</td>
</tr>
</tbody>
</table>
<app-pager [totalItems]="totalcounts" [currentPage]="currentPage" (pageChanges)="pageChanged($event)"></app-pager>
</div>
</div>
</div>
</div>
</div>

  说明:

    (changeStation)="userChange($event)",其中“changeStation”是搜索组件发射的发射器名字,在父组件中主要是起到监听搜索组件发射器作用,当搜索组件发射数据时,这个监听事件呗触发,调用userChange($event)这个方法;

    userChange($event),这个方法是定义在父组件里面的一个方法,通过$event浏览器事件,我们可以拿到搜索组件发射过来的数据;

  第六步:父组件定义监听页码变化的 userChange($event)方法,代码如下:

    

   //根据搜索内容更新用户列表
userChange(filterContent:string){
this.currentPage = 1;
this.content = filterContent;
this.sign = 2;
//重新获取用户列表数据
this.getUserData();
}

4.运行截图

    搜索前:

    

    搜索后:

  

  

        

      

Angular4.x 自定义搜索组件的更多相关文章

  1. angular4 中自定义pagination组件

    你用Angular 吗? 一.介绍 一个基于angular4 开发的可以分页的组件.组件的好处就是可以复用,复用.....作为一个前端码农,开始的分页功能实现是我用jquery写的,其他同事用的时候都 ...

  2. Angular4.+ ngx-bootstrap Pagination 自定义分页组件

    Angular4 随笔(二)  ——自定义分页组件 1.简介 本组件主要是实现了分页组件显示功能,通过使用 ngx-bootstrap Pagination分页组件实现. 基本逻辑: 1.创建一个分页 ...

  3. Django框架---- 自定义分页组件

    分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(self,cur ...

  4. Django学习---组合搜索组件

    组合搜索组件 我们都会写博客,写文章之后我们要给文章设置目录,设置类型.之后我们在浏览文章的时候就能够按类别进行精确定位到文章,那这个组合搜索我们应该怎么做呢? 首先我们先创建3张表,分别存放文章,文 ...

  5. weex 项目开发(五)自定义 过滤函数 和 混合 及 自定义 Header 组件

    1.自定义  过滤函数 src / filters / index.js /** * 自定义 过滤函数 */ export function host (url) { if (!url) return ...

  6. 基于 Python 的自定义分页组件

    基于 Python 的自定义分页组件 分页是网页中经常用到的地方,所以将分页功能分出来,作为一个组件可以方便地使用. 分页实际上就是不同的 url ,通过这些 url 获取不同的数据. 业务逻辑简介 ...

  7. 如何在个人博客引擎 Hexo 中添加 Swiftype 搜索组件

    在您现在看到的我的博客站点,后台使用的是 Hexo 作为博客引擎,但是默认集成的搜索组件是进行 form 提交到 Google 进行搜索的,为了更好地体验,本文介绍如何在 Hexo 博客中集成 Swi ...

  8. SSIS自定义数据流组件开发(血路)

    由于特殊的原因(怎么特殊不解释),需要开发自定义数据流组件处理. 查了很多资料,用了不同的版本,发现各种各样的问题没有找到最终的解决方案. 遇到的问题如下: 用VS2015编译出来的插件,在SSDTB ...

  9. Android Studio开发基础之自定义View组件

    一般情况下,不直接使用View和ViewGroup类,而是使用使用其子类.例如要显示一张图片可以用View类的子类ImageView,开发自定义View组件可分为两个主要步骤: 一.创建一个继承自an ...

随机推荐

  1. 【kuangbin专题】计算几何基础

    1.poj2318 TOYS 传送:http://poj.org/problem?id=2318 题意:有m个点落在n+1个区域内.问落在每个区域的个数. 分析:二分查找落在哪个区域内.叉积判断点与线 ...

  2. 全世界最顶级黑客同时沸腾在DEF CON 25,是怎样一种体验?

    2017,我在这里!圆你黑客梦!!   被称为黑客“世界杯”与“奥斯卡”的美国黑帽技术大会Black Hat和世界黑客大会DEF CON 是众多黑客心中最神圣的梦!   有位小表弟告诉我说:Black ...

  3. 详述MSSQL服务在渗透测试中的利用(上篇)

    前言: 致力于复现最实用的漏洞利用过程. 本文将带领大家学习以下内容: 学习使用`xp_cmdshell`扩展存储过程 学习调用`wscript.shell` 学习MSSQL写文件 学习沙盘模式提权 ...

  4. 【AWK】:常用总结

    单机文本数据处理,常用AWK,总结一下AWK最常用的要点,备忘备查. 1.What is AWK(1)Aho.Weinberger.Kernighan三位发明者名字首字母:(2)一个行文本处理工具: ...

  5. linux防火墙(三)—— iptables语法之匹配条件

    一.iptables规则的匹配条件类型有三类 1.通用匹配:可直接使用,不依赖于其他条件或扩展,包括网络协议.IP地址.网络接口等条件 2.隐含匹配:要求以特定的协议匹配作为前提,包括端口.TCP标记 ...

  6. JS生成某个范围的随机数【四种情况详解】

    JS没有现成的函数,能够直接生成指定范围的随机数. 但是它有个函数:Math.random()  这个函数可以生成 [0,1) 的一个随机数. 利用它,我们就可以生成指定范围内的随机数. 而涉及范围的 ...

  7. win10+Theano+GPU

    1. cuda + cudnn 首先还是要先安装GPU库,具体和caffe安装中一样. 2. Theano 为防止下载速度慢,配置清华镜像 conda config --add channels ht ...

  8. mvn cli 搭建项目架构

    创建如图所示目录结构 在system-parent创建如下目录 ├─system-dao ├─system-domain ├─system-service └─system-web 创建system- ...

  9. 集合框架_DAY16

    1:List及其子类(掌握)     (1)List的特点:     Collection    |--List:元素有序(存入顺序和取出顺序一致),可重复.    |--Set:元素无序,唯一.   ...

  10. Windows下的Jdk 1.8*安装并配置(图文详解)

    不多说,直接上干货! 简单说下,jdk1.8*的下载,见http://www.cnblogs.com/zlslch/p/5658383.html 双击jdk-8u60-windows-x64.exe运 ...