20.pipe

pipe相当于angular1里面的filter

做一些格式转换啊,或者从一个数组里面选取一个元素等等

只要你愿意可以定义很复杂的内容‘’

我们先看看 angular2 里面自带的一些pipe

我们去我们的week3

下的problem-list下

我们到html里面

 

之前是这样的

 

 之后是这样的

 

 

 

我们再写三个angular2自带的pipe

然后我们去Controller去对应一下

 

 

 

我们还可以 让日期更详尽一点

甚至我们可以使用多个pipe

以上就是 angular2自带的pipe

 

如果你想实现功能复杂的pipe 类似angular1里面的filter就需要你自己去实现

 

 

我们今天要做到的事就是我们的problemlist 页面 navbar里面有个search我们一直都没用过

我们希望我在搜索框内 搜索 S就可以将 所有的problem过滤一下 将 带有S的问题筛选出来

 

 

首先呢

我们需要跟踪我们在input框内输入的内容

建一个observable 

 我们要sub这个input框内的value change的observable

 

我们需要将value传递一个pipe

 

我们从后往前实现

我们先实现pipe 来过滤问题列表

han@han-VirtualBox:~/Projects/BittigerCS503/week3$ ls
launcher.sh  oj-client  oj-server  public
han@han-VirtualBox:~/Projects/BittigerCS503/week3$ cd oj-client/
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client$ ls
angular.json   node_modules        README.md
e2e            package.json        src
karma.conf.js  protractor.conf.js  tslint.json
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client$ cd src
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client/src$ cd app
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client/src/app$ ls
app.component.css      app.component.ts  components        models
app.component.html     app.module.ts     messages          services
app.component.spec.ts  app.routes.ts     mock-problems.ts
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client/src/app$ mkdir pipes
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client/src/app$ cd pipes/
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client/src/app/pipes$ ls
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client/src/app/pipes$ ng g pipe search
CREATE src/app/pipes/search.pipe.spec.ts (187 bytes)
CREATE src/app/pipes/search.pipe.ts (201 bytes)
UPDATE src/app/app.module.ts (1846 bytes)
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client/src/app/pipes$ 
pipes

 

创建2个文件 更新了一个文件

 

 

和component一样不用手动添加 

区别于service需要手动的情况

 

 

 那么怎么用呢

我去到问题列表的html 找到 遍历问题列表的位置

我们看看能search到什么东西

发现我们的问题列表不见了

为了看清楚我们在input列表中传递的值

我们就将他打印出来看

这是因为我们return null

如果我们return value 就是将问题列表数组原样返回

 

既然我们返回的value

是个数组 那么我们就可以对这个数组进行操作

比如 我们可以对数组进行 筛选操作

满足条件的返回

我们用的是JS的filer()这个方法呢 需要一个callback function作为他的args

 

为了更明显 我们 将value改成probkems 这样更清楚

 

少打了个t

 

我们看看是不是

 

我们发现原来4个问题变成2个 并且名字中带sum 且不区分大小写

但是呢 sum使我们写死的 我希望用变量 那么 就要提到刚才没提的args了

那么

 

那么我在哪里传入这个term呢?

我们去在使用pipe的地方

在search的后背可以传入参数

刷新页面

发现是可以的

既然可以 那么 这个参数当然可以是变量 后边会做

 

 

第二呢,就是navbar哪里的input框内的内容如何传递到 第一步的 我们的component  problemlist里面去呢?

就是从一个component传递值给另外一个component

当然我们可以创建一个service 让他和这2个component做通信

还有别的通信方式

就是将2个component和他们的parent component 也就是 app component 进行通信

但是这样很繁琐

 

所以我们还是采取service的方法

 

 

search.pipe.spec.ts  search.pipe.ts
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client/src/app/pipes$ cd ..
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client/src/app$ ls
app.component.css      app.component.ts  components        models
app.component.html     app.module.ts     messages          pipes
app.component.spec.ts  app.routes.ts     mock-problems.ts  services
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client/src/app$ cd services/
han@han-VirtualBox:~/Projects/BittigerCS503/week3/oj-client/src/app/services$ ng g s input
input service

我们知道和component不同 service不会自动写入app modules 需要我们手动 写入 其中的provoide菜能供所有component使用

这样我们就可以在所有的component中使用了

比如我们的navbar和problemlist

 

我们不是在service里面直接传递 因为如果用service的component的多了 并且某个component想改变值 那么就会很麻烦 耦合性太强

 

我们的做法是在service里面做一个  subject

 

 

我用他也是因为他有状态 比如我们给的值是空 那么 我们所有的problemlist内容都会显示出来作为默认

为了安全我们 需要将他做成observable返回。

inputservice就写完了

 

最后一步就是

 

 

 

这样 我们就可以在我们的navbar component里面使用

我们想无论哪个页面 problemlist 还是problemdetail也好 只要有search框的地方 输入内容 就自动跳转到符号条件的problemlist页面

加这2个就可以去ts文件 Controller去实现了

 

还有一个

如果不在problem页面的话

就跳转到problemlist页面

 

 

 

 我们把problemlist页面那个参数改成变量

 

然后我们要从inputservice里面拿到值

 

 

然后我们看看有没有将值传递过去

 我们输入s

我们输入sum

 

转载于:https://www.cnblogs.com/PoeticalJustice/p/9459756.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis内部数据结构-跳跃表

今天学习了跳跃表,记录一下下~ 一、跳跃表简介 跳跃表是一种随机化数据结构,基于并联的链表,其效率可以比拟平衡二叉树,查找、删除、插入等操作都可以在对数期望时间内完成,对比平衡树,跳跃表的实现要简…

Mybatis源码学习笔记

Mybatis核心概念: Configuration : 管理 mysql-config.xml 全局配置关系类 SqlSessionFactory: Session 管理工厂接口 Session: SqlSession 是一个面向用户(程序员)的接口。SqlSession 中提供了很多操作数据库的方法 Executor : 执行器是一个接口…

JQData数据提取及MySQL简单操作——基于Python

JQData平台真的挺不错,平台数据可以免费使用一年,满足绝大多数人需求,具体账号获取请自行百度哟~ 因需要高频数据而Wind也只给近三年,再要还得购,,机缘遇到这一平台,获得了账号试用很不错&#…

JVM模型学习笔记

JVM由三个主要的子系统构成 1. 运行时数据区(内存结构): 运行时数据区也是JVM的核心部分 内存数据区又分:堆、java栈、本地方法栈、程序计数器、方法区 1.1 本地方法栈(线程私有): 登记native方法,在Execution Eng…

tomcat 设置虚拟路径的4种方法

通常使用方法1或者方法2 方法1 (添加配置文件):推荐使用,不需要重启服务器 在Tomcat根目录下的/conf/Catalina/localhost/ 路径下新建一个filename.xml,并在该xml中编写语句 即可创建虚拟站点,虚拟站点名为…

sharding-sphere按月动态分表

公司有个记录表,每天有几百万的数据,所以我决定按月把他分下表。 用spring整合的。 首先,sharding-sphere不支持自动创建表,所以我提前创建了两年的表,命名规则 logicTableName _2019_06 以下是官方文档上面的分片…

大厂Java岗面试心得记录

最近裸辞,面了几家大厂,offer率高达100% 哈哈,然后发现选公司也是一件难事。 废话不多说,分享一下,我遇到的面试题,大概有以下这些: JVM: 1.JVM有哪些区域? 2.堆和栈分别说说内部东…

原生Js 两种方法实现页面关键字高亮显示

方法一 依靠正则表达式修改 1.获取obj的html 2.统一替换html标签 3.替换要修改的关键字 4.再把html标签修改回去 不足就是如果查找的关键字跟替换的标签一样就有冲突了 <!DOCTYPE HTML> <html lang"en"> <meta http-equiv"Content-Type" co…

SpringBoot启动报错java.nio.charset.MalformedInputException: Input length = 2解决方案

最近新搭的一个项目&#xff0c;启动时&#xff0c;会报MalformedInputException这个异常&#xff0c; 百度了很久&#xff0c;网上说的千篇一律&#xff0c; 有的说&#xff0c;把yml复制到txt再复制回来 有的说&#xff0c;设置eclipse的utf-8环境 这些根本没有根治这个问…

IDEA主题设置与eclipse代码风格一致

习惯了用eclipse的你&#xff0c;是不是转到用idea特别不习惯&#xff0c;没有关系&#xff0c; 我们可以把idea的代码风格改成eclipse的&#xff0c;快捷键也换成eclipse的。 下载这个jar包&#xff0c;导入settings文件即可 下载地址 : https://download.csdn.net/download…

浅谈分布式锁

概述 为了防止分布式系统中的多个进程之间相互干扰&#xff0c;我们需要一种分布式协调技术来对这些进程进行调度。而这个分布式协调技术的核心就是来实现这个分布式锁。 为什么要使用分布式锁 成员变量 A 存在 JVM1、JVM2、JVM3 三个 JVM 内存中 成员变量 A 同时都会在 JVM …

[css] 说说sroll-snap-type属性的运用场景有哪些?相关联的属性还有哪些?

[css] 说说sroll-snap-type属性的运用场景有哪些&#xff1f;相关联的属性还有哪些&#xff1f; 使用 sroll-snap-type 优化滚动 根据 CSS Scroll Snap Module Level 1 规范&#xff0c;CSS 新增了一批能够控制滚动的属性&#xff0c;让滚动能够在仅仅通过 CSS 的控制下&#…

简单的一个月之设计实现内容1

需求:简单的新闻管理系统,实现简单的增删改查功能 1.数据库表的建立 ID非空,数据类型看着给 2.写实体(entity)News.java 要与数据库中的字段相对应,(id,optimistic我没写,问题不大)1 package com.pay.boss.entity; //封装好的entity包,直接引用2 3 import java.util.Date; …

分享一个有趣的网站“让我帮你百度一下“

如何解决同事的弱智问题&#xff0c;分享一个有趣的网站 日常工作中&#xff0c;总有些人会问你一些弱智的问题 你只需要三步就可以完美解决: 1.打开这个链接: 让我帮你百度一下 2.输入他的问题、点回车 3.复制结果链接甩到他的脸上_ hahahhahahaha 这样就解决了一切烦恼&a…

SQL Server2014 SP2新增的数据库克隆功能

SQL Server2014 SP2新增的数据库克隆功能 原文:SQL Server2014 SP2新增的数据库克隆功能SQL Server2014 SP2新增的数据库克隆功能 创建测试库 --创建测试数据库 create database testtestuse testtest go --创建表 create table testtest(id int ,name varchar(20)) --插入数据…

工作328:uni-两个页面对象传递

getDetailList(record){console.log(record)uni.navigateTo({url:../formdaliyList/formdaliyList?recordencodeURIComponent(JSON.stringify(record))})},onLoad(e){/* JSON.parse() */let obj JSON.parse(decodeURIComponent(e.record));console.log(obj)},

vue-js 特殊变量$event常识

背景 如果我们要阻止默认事件&#xff0c;在 chrome 等浏览器中&#xff0c;我们可能要写一个&#xff1a; event.preventDefault(); 而在 IE 中&#xff0c;我们则需要写&#xff1a; event.returnValue false; jquery &#xff0c;跨浏览器的实现&#xff0c;我们统一只…

七、线性表的链式存储结构

1、问题引入 开发数组类模板的原因在于&#xff1a;在创建基于顺序存储结构的线性表时&#xff0c;发现这样的线性表可能被误用&#xff0c;因为重载了数组访问操作符&#xff0c;使用时跟数组类似&#xff0c;但是线性表和数组有很大的区别&#xff0c;所以激发了新的需求&…

工作333:uni-增加添加成功提示

this.$u.api.getPartyAdd(this.form).then(res > {console.log(res)if(res.data.code200){/* uni.showLoading({title: 添加中}); */this.$refs.uToast.show({title: res.data.message,type: success,})setTimeout(function () {uni.navigateTo({url: "../notice_notic…

HDU 6064 RXD and numbers

传送门 有向图生成树计数 &#xff08;度数 ->入度->外向树&#xff09; BEST定理 &#xff08;不定起点的欧拉回路个数某点为根的外向树个数&#xff08;存在欧拉回路->每个点为根的外向树个数相等&#xff09;*&#xff08;每个点的度数&#xff08;存在欧拉回路-&g…