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. Java 基础笔记

    1. 面向对象三大特性:封装,继承,多态,java面向对象的最终父类是:Object 2. getInstance() 单实例设计模式factory() 工厂模式build() 建造者模式 3. 静态 ...

  2. 李航统计学习方法——算法2k近邻法

    2.4.1 构造kd树 给定一个二维空间数据集,T={(2,3),(5,4),(9,6)(4,7),(8,1),(7,2)} ,构造的kd树见下图 2.4.2 kd树最近邻搜索算法 三.实现算法 下面 ...

  3. 修改gitlab仓库地址

    最近使用GitLab 搭建了Git的私有仓库,但是发现私有仓库的地址是一串序列号,搞了半天克隆时都是提醒仓库无效,后来才觉得不对,不是本机的IP地址如图 对此我们需要修改gitlab.yml文件: 1 ...

  4. Webflux快速入门

    SpringWebflux是SpringFramework5.0添加的新功能,WebFlux本身追随当下最火的Reactive Programming而诞生的框架,那么本篇就来简述一下这个框架到底是做 ...

  5. 阿里云安装配置Ghost

    阿里云手动重装系统N次了,折腾不止.  系统环境 CentOS 6.3 X64 , 两块硬盘 系统 +数据盘 #重新挂载硬盘 [root@AY14040623435015772eZ ~]# fdisk ...

  6. php -- 特殊变量的三种输出

    ----- 020-3outputs.php ----- <!DOCTYPE html> <html> <head> <meta http-equiv=&qu ...

  7. UTF-8和GBK编码的区别

    UTF-8:对英文使用8位(一个字节).中文使用24位(三个字节)编码.对于英文字符比较多的网站一般用utf-8来编码以节省空间:包含全世界所有国家需要用到的字符,其编码的蚊子可以在各国各种支持utf ...

  8. Vue笔记:使用 Yarn 管理依赖包

    上年10月份, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm ,它比npm更快.更高效. Yarn VS npm 1.yarn.lock 文件 在 npm 中同样 ...

  9. kafka主题管理

    若代理设置了 auto.create.topics.enable=true,这样还未创建topic就往kafka发送消息时, 会自动创建一个 ${num.partitions}个分区和{default ...

  10. 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法

    [试题描述]:  给定二叉树先序中序,建立二叉树的递归算法 其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序列,紧跟着是右子树先序遍历序列,固根节点已可从先序序列中分离.在中序序列中找到 ...