Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >避免http请求垃圾邮件

我有一个切换开关,当它被触发时,它会发出http补丁请求。下面你可以看到它是什么样子的:

模板:

代码语言:javascript
运行
AI代码解释
复制
<div id="toggle-status-btn-container">
    <div class="slider" [ngClass]="{'to-right': !shopIsOpen}"></div>
    <div class="label-container">
        <label class="store-opened" (click)="updateShopSlotsStatus(true)" [ngClass]="{'toggled-opened-text': !shopIsOpen}">OPENED</label>
    </div>
    <div class="label-container">
        <label class="store-closed" (click)="updateShopSlotsStatus(false)" [ngClass]="{'toggled-closed-text': !shopIsOpen}">CLOSED</label>
    </div>
</div>

它工作得很好,但到目前为止,用户可以垃圾邮件这个切换开关,触发多个http请求。

我能做些什么来防止这种行为?如果用户正在发送垃圾邮件切换开关,我不想触发http请求。也许有一种方法可以只触发最后一个?由于我是RxJ的新手,我真的不知道如何解决这个问题。

下面是在组件.ts中由click事件调用的方法:

代码语言:javascript
运行
AI代码解释
复制
updateShopSlotsStatus(isOpen: boolean){
    this.shopIsOpen = isOpen;
    this.apiService.updateShopSlotsStatus(isOpen, this.weekDay).subscribe();
}

以及服务文件中的http请求:

代码语言:javascript
运行
AI代码解释
复制
updateShopSlotsStatus(isOpen: boolean, weekDay: string){
    const endpoint = this.url + "shipping/" + this.webzineId + "/delivery_slots" + "/";
    return this.http.patch(endpoint, {"slots": { [weekDay] : { "enabled": isOpen }}});
}

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-14 17:27:49

您可能希望像在this StackBlitz中那样组合使用BehaviorSubjectswitchMap

在这里,我将打开和关闭按钮绑定到一个函数,该函数更改BehaviorSubject的值,如下所示:

模板:

代码语言:javascript
运行
AI代码解释
复制
  <button
    (click)="updateShopSlotsStatus(true)"
    [ngClass]="{'selected': shopSlotStatus$ | async}"
  >
    OPEN
  </button>
  <button
    (click)="updateShopSlotsStatus(false)"
    [ngClass]="{'selected': !(shopSlotStatus$ | async)}"
  >
    CLOSED
  </button>

ts:

代码语言:javascript
运行
AI代码解释
复制
  updateShopSlotsStatus(isOpen: boolean) {
    this.shopSlotStatusSubject$.next(isOpen);
  }

然后,您可以观察BehaviorSubject上的更改,如下所示:

代码语言:javascript
运行
AI代码解释
复制
  private shopSlotStatusSubject$: BehaviorSubject<
    boolean
  > = new BehaviorSubject(false);

  // shared so only one subscription is maintained
  private readonly shopSlotStatus$ = this.shopSlotStatusSubject$
    .asObservable()
    .pipe(share());

  readonly changeSlotStatus$ = this.shopSlotStatus$.pipe(
    // you could introduce a debounceTime here if you wanted
    // debounceTime(500),
    tap(() => (this.changingStatus = true)),
    // faked API call here
    switchMap(status => this.appService.updateShopSlotsStatus(status)),
    tap(() => (this.changingStatus = false))
  );

如果源(在这种情况下是changeSlotStatus$可观测物)发射,switchMap操作员将取消任何飞行中的可观测物。

我已经在Stackblitz中包含了exhaustMapmergeMap的导入。将switchMap更改为这两个操作符,看看它们的工作方式有何不同。exhaustMap将忽略所有后续的发射,直到正在进行的发射完成,并且mergeMap将发出与按下按钮一样多的请求。我将留给您来决定哪种方法是最好的!您可以在learn rxjs.上了解更多信息,我建议您阅读有关RxJS和不同运算符的内容,以及如何使用pipe组合它们。RxJS是个好东西。

然后,如果您想要禁用正在运行的请求时按下的按钮,还可以绑定到changingStatus布尔值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67972014

复制
相关文章
【说站】python字符串的多行输出
1、字符串的每行末尾使用 \ 续行。以多行的形式书写字符串,每行的末尾使用 \ 续行。
很酷的站长
2022/11/23
1.6K0
javascript 空格_css怎样输出空格
document.write(” 1 2 3 “);
全栈程序员站长
2022/11/09
3.3K0
python3.6 输入多行,输出多行
import sys result=[] for line in sys.stdin:     if line[0] is '\n':         break     score = line.split()     score=list(map(int,score))     n=score[0]     score=score[1:]     scoresum=sum(score)-min(score)-max(score)     sc=float(scoresum)/(n-2)     result.append(round(sc,2)) for i in result:     print(format(i,'.2f'))
py3study
2020/01/09
2.7K0
python多行注释和跨行字符串
3》三个单引号(或三个双引号)也可以表示跨行字符串,如: >>> s=''' ... hello ... python ... ''' >>> s '\nhello\npython\n'
py3study
2020/01/07
2.7K0
Js限制空格和空字符串
isNull(content) { const reg = '^[ ]+$' const re = new RegExp(reg) return re.test(content) }, true为空 false为有输入值
明知山
2021/05/20
5.2K0
ES6字符串模板多行清除行头空格制表符
对于多行文本我肯定优先考虑用 ES6字符串模板来实现,直接使用的效果并不是很符合想要的。
CRPER
2019/11/29
1.1K0
DataTable-输出Excel添加额外行的实现
有个需求需要在 Datatable 输出的 Excel 顶端添加几行数据, 看了下 Datatable 官方的实现, 作者似乎也没啥好主意, 不过一些用户提供了方法。
szhshp
2022/09/21
3630
php用空格分隔字符串,分割字符串空格[通俗易懂]
String[] data = s.split(“@”); // 以@分割字符串,获得@后的值。
全栈程序员站长
2022/11/16
6.3K0
C++字符串变量的运算 | 使用+输出两个字符串变量
在上一节《C++字符串处理函数》中小林讲过:在以字符数组存放字符串时,字符串的运算要用字符串函数,如strcat strcmp、strcpy。
用户7886150
2021/02/08
2K0
C++字符串变量的运算 | 使用+输出两个字符串变量
在《7.2 C++字符串处理函数》中小林讲过:在以字符数组存放字符串时,字符串的运算要用字符串函数,如strcat strcmp、strcpy。
小林C语言
2020/12/11
2.1K0
C++字符串变量的运算 | 使用+输出两个字符串变量
如何在 CMD 启动的软件传入带空格的路径
在使用 CMD 命令的时候,会将传入的命令按照空格分为多个不同的命令,但是路径经常是带有空格的。特别是想将参数传入到通过命令行启动的软件里面,可以如何做?
林德熙
2019/06/15
4.2K0
Java 多行字符串
在本文中,我们来说说 Java 的多行字符串(multiline strings )。
HoneyMoose
2022/08/08
4.2K0
Java 多行字符串
变量和字符串
4、变量的命名可以去命名任何合法的名字,但作为一个优秀的程序员,请将尽量给变量取个专业些的名字。
清菡
2020/12/02
8490
变量和字符串
python笔记74- yaml 使用特殊符号| 解决字符串带换行的问题
在yaml文件中通过字符串写一行,如果字符串需要换行的,可以使用 yaml中的特殊符号|和>。
上海-悠悠
2023/01/03
3.7K0
php删除字符串的空格
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105882.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/09
3.7K0
带空格的字符串反转
就是输入一段文本,然后让你实现字符串反转。 肺炎严重,假期延长,闲的不得不自主学习,然后就日常刷水题。 第一次的方法,简单易懂,就是时间超限了。TLIM #include<bits/stdc++.h> using namespace std; stack<string> st; int main(){ string s; cin>>s; reverse(s.begin(),s.end()); st.push(s); while(getchar() != '\n'){ cin>>s; re
杨鹏伟
2020/09/11
1.4K0
JS去除字符串的空格
JS去除字符串前后空格 //去前后空格 //var LO = data.replace(/(^\s*)|(\s*$)/g, ""); //var LA = data.replace(/(^\s*)|(\s*$)/g, ""); JS去除字符串所有空格 //直接去除所有的空格 var LL = data.replace(/\s+/g,""); 在Kettle做数据清洗中用到的: //Script here //去前后空格 //var LO = LONGITUDE.replace(/(^\s*)|(\s*
手撕代码八百里
2020/07/28
8.2K0
字符串:替换空格
示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy."
代码随想录
2020/09/10
4.7K0
字符串:替换空格
编程短文:Bash echo如何原生输出带空格的字符串而不换行
为什么要数量掌握bash编程,因为它是linux下的默认工具。任何时候与系统内核对话,我们都直接面对shell。操作系统提供了为数众多的便利工具,用于完成复杂的操作。
程序员小助手
2020/05/26
4.4K0
点击加载更多

相似问题

带空格的Bash多行输出,作为数组变量

10

clojure -在组合字符串和变量时避免额外的空格

20

将多行变量写入cmd文件

13

如何删除输出之间的额外空格?

23

删除cmd中变量开头的空格

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档