日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Angular組件庫ng-zorro-antd實(shí)現(xiàn)radio單選框選擇

瀏覽:392日期:2022-06-10 08:53:48
目錄
  • antd組件庫升級(jí)之后代碼不生效
  • 解決方法
  • 總結(jié)

antd組件庫升級(jí)之后代碼不生效

項(xiàng)目業(yè)務(wù)之前的代碼設(shè)計(jì)了類似radio單選框取消選擇的相關(guān)邏輯,用的是下面類似的代碼實(shí)現(xiàn)的。但近期對(duì)ng-zorro-antd組件庫升級(jí)之后,下面的代碼不生效了。

import { Component } from "@angular/core";
@Component({
  selector: "nz-demo-radio-radiogroup",
  template: `
    <nz-radio-group [(ngModel)]="radioValue">
      <label nz-radio (click)="click("A")" nzValue="A">A</label>
      <label nz-radio nzValue="B">B</label>
      <label nz-radio nzValue="C">C</label>
      <label nz-radio nzValue="D">D</label>
    </nz-radio-group>
  `
})
export class NzDemoRadioRadiogroupComponent {
  radioValue = "A";
  click(value: any) {
    if (this.radioValue === value) {
      this.radioValue = ""
    }
  }
}

于是我到組件庫源碼里去找原因,并寫demo打斷點(diǎn)調(diào)試

  • 將nz-radio-group綁定的radioValue值清空會(huì)首先走group組件下面的邏輯
writeValue(value: NzSafeAny): void {
    this.value = value;
    this.nzRadioService.select(value);
    this.cdr.markForCheck();
  }
  • nz-radio 和 nz-radio-group都是共用這個(gè)NzRadioService,且組件內(nèi)init時(shí)都有對(duì)selected$這個(gè)流做監(jiān)聽
@Injectable()
export class NzRadioService {
  selected$ = new ReplaySubject<NzSafeAny>(1);
  touched$ = new Subject<void>();
  disabled$ = new ReplaySubject<boolean>(1);
  name$ = new ReplaySubject<string>(1);
  touch(): void {
    this.touched$.next();
  }
  select(value: NzSafeAny): void {
    this.selected$.next(value);
  }
  setDisabled(value: boolean): void {
    this.disabled$.next(value);
  }
  setName(value: string): void {
    this.name$.next(value);
  }
}
// radio.component.ts ====> ngOnInit
this.nzRadioService.selected$.pipe(takeUntil(this.destroy$)).subscribe(value => {
const isChecked = this.isChecked;
this.isChecked = this.nzValue === value;
// We don"t have to run `onChange()` on each `nz-radio` button whenever the `selected$` emits.
// If we have 8 `nz-radio` buttons within the `nz-radio-group` and they"re all connected with
// `ngModel` or `formControl` then `onChange()` will be called 8 times for each `nz-radio` button.
// We prevent this by checking if `isChecked` has been changed or not.
if (
  this.isNgModel &&
  isChecked !== this.isChecked &&
  // We"re only intereted if `isChecked` has been changed to `false` value to emit `false` to the ascendant form,
  // since we already emit `true` within the `setupClickListener`.
  this.isChecked === false
) {
  this.onChange(false);
}
this.cdr.markForCheck();
      });
  • 當(dāng)監(jiān)聽完值改變后,后面又執(zhí)行了radio的click事件,把點(diǎn)擊哪個(gè)radio的value值傳過去了,所以之前的清空值操作就被覆蓋了。
private setupClickListener(): void {
    this.ngZone.runOutsideAngular(() => {
      fromEvent<MouseEvent>(this.elementRef.nativeElement, "click")
.pipe(takeUntil(this.destroy$))
.subscribe(event => {
  /** prevent label click triggered twice. **/
  event.stopPropagation();
  event.preventDefault();
  if (this.nzDisabled || this.isChecked) {
    return;
  }
  this.ngZone.run(() => {
    // !!! again  
    this.nzRadioService?.select(this.nzValue);
    if (this.isNgModel) {
      this.isChecked = true;
      this.onChange(true);
    }
    this.cdr.markForCheck();
  });
});
    });
  }

解決方法

清空值的操作加setTimeout 使組件庫內(nèi)部先執(zhí)行完click后續(xù)再執(zhí)行。

import { Component } from "@angular/core";
@Component({
selector: "nz-demo-radio-radiogroup",
template: `
  <nz-radio-group [(ngModel)]="radioValue">
    <label nz-radio (click)="click("A")" nzValue="A">A</label>
    <label nz-radio nzValue="B">B</label>
    <label nz-radio nzValue="C">C</label>
    <label nz-radio nzValue="D">D</label>
  </nz-radio-group>
`
})
export class NzDemoRadioRadiogroupComponent {
radioValue = "A";
click(value: any) {
  if (this.radioValue === value) {
    setTimeout(()=>{
      this.radioValue = ""
    })
  }
}
}

總結(jié)

其實(shí)組件庫單選radio本身是不支持取消選擇的,正解應(yīng)該是用checkbox實(shí)現(xiàn)相關(guān)的業(yè)務(wù)邏輯才對(duì),但很久之前的業(yè)務(wù)邏輯涉及到很多地方的修改,此時(shí)再換checkbox并且換樣式的話,改動(dòng)的還是比較大的,就先簡(jiǎn)單解決這個(gè)問題。

標(biāo)簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品毛片一区二区在线看| 免费看日韩精品| 国产精品亚洲四区在线观看| 日本精品久久| 国产毛片精品久久| 捆绑调教美女网站视频一区| 日韩国产综合| 精品1区2区3区4区| 日本不卡一区二区| 麻豆精品蜜桃视频网站| 久久精品91| 色在线中文字幕| 精品在线播放| 亚洲精品在线二区| 久久精品一本| 一区在线观看| 欧美一区成人| 在线观看精品| 蜜桃视频一区二区| 国产一区二区三区网| 欧美精品激情| 国产精品色婷婷在线观看| 欧洲av不卡| 日韩三级精品| 五月天av在线| 在线日韩成人| 国产精品自在| 欧美日韩在线二区| 国产欧美一区二区三区米奇| 色老板在线视频一区二区| 亚洲一区二区三区四区电影| 久久精品免费看| 影音先锋国产精品| 国产精品久久久久9999高清| 图片区亚洲欧美小说区| 久久99影视| 久久福利毛片| 日韩亚洲一区在线| 欧美日韩一区自拍| 夜夜精品视频| 国产美女高潮在线| 免费成人在线观看| 91综合视频| 欧美一级二级三级视频| 五月精品视频| 久久亚洲精精品中文字幕| 亚洲一区日本| 欧产日产国产精品视频| 国产伦一区二区三区| 视频在线观看一区二区三区| 蜜臀国产一区| 国产精品对白久久久久粗| 丝袜美腿亚洲色图| 久久中文视频| 国产精品99久久免费| 国产视频欧美| 久久永久免费| 日韩三级一区| 午夜在线视频观看日韩17c| 日韩国产一区| 精品国产网站| 国产精品一区二区av日韩在线| 亚洲在线成人| 久久久影院免费| 欧美aa一级| 国产成人精品一区二区三区免费| 日韩国产一区二| 在线视频亚洲欧美中文| 亚洲午夜视频| 久久精品卡一| 在线观看精品| 韩国精品主播一区二区在线观看 | 欧美日韩1区2区3区| 夜夜嗨网站十八久久| 色婷婷精品视频| 成人日韩av| 国产精品色在线网站| 91亚洲精品在看在线观看高清| 老司机精品久久| 五月天久久久| 五月天久久网站| 欧美99久久| 99久久夜色精品国产亚洲1000部| 毛片在线网站| 久久婷婷国产| 久久gogo国模啪啪裸体| 国产精品亚洲欧美日韩一区在线 | 国产一区二区三区视频在线| 国产福利一区二区三区在线播放| 欧美天堂一区二区| 久久国产三级| 国产精品视频一区二区三区综合| 欧美一区二区三区久久| **爰片久久毛片| 国产欧美亚洲精品a| 中文字幕日本一区| 亚洲aa在线| 久久精品97| 国产精品一区二区99| 美日韩一区二区三区| 国产精品黑丝在线播放| 国产精品久久久久久久久久10秀 | 视频一区日韩| 日本少妇精品亚洲第一区| 欧美综合精品| 久久影院一区二区三区| 国产盗摄——sm在线视频| 久久久久97| 午夜精品成人av| av亚洲免费| 男人的天堂久久精品| 日韩国产在线观看| 免费在线观看一区| 久久影院午夜精品| 久久网站免费观看| 蜜桃视频在线观看一区| 国产美女亚洲精品7777| 国产一区二区三区久久| 国产美女高潮在线观看| 高清不卡一区| 欧美男人天堂| 视频一区中文字幕国产| 免费日韩精品中文字幕视频在线| 欧美 日韩 国产精品免费观看| 99成人在线| 日韩 欧美一区二区三区| 国产亚洲人成a在线v网站| 麻豆精品少妇| 国产精品成久久久久| 蜜臀av免费一区二区三区| 日本在线视频一区二区| 国产精品一区二区三区av麻| 天堂av在线| 视频一区国产视频| 日韩不卡在线观看日韩不卡视频| 福利一区视频| 一区二区三区四区日韩| 国产欧美在线| 99成人在线视频| 奇米亚洲欧美| 国产一区二区精品久| 91久久亚洲| 欧美激情综合| 丝袜美腿一区二区三区| 国产免费播放一区二区| 神马午夜在线视频| 男女男精品网站| 97精品中文字幕| 视频一区二区三区在线| 国产欧美日韩亚洲一区二区三区| 成人在线视频区| 亚洲免费网址| 久久精品99久久久| 国产资源在线观看入口av| 久久av在线| 精品久久久网| 日本高清久久| 日韩在线第七页| 日韩欧美中文在线观看| 欧美亚洲国产激情| 日韩精品三区四区| 99久久婷婷这里只有精品| 蜜桃视频在线观看一区二区| 日本少妇一区二区| 亚洲午夜天堂| 免费成人在线影院| 欧美天堂视频| 好吊视频一区二区三区四区| 国产精久久一区二区| 欧美特黄一级| 日韩精品dvd| 欧美精品导航| 97久久亚洲| 日本欧洲一区二区| 久久国产中文字幕| 亚洲啊v在线| 激情久久99| 国产精品毛片视频| 日本色综合中文字幕| 蜜臀a∨国产成人精品| 米奇777超碰欧美日韩亚洲| 国产成人a视频高清在线观看| 欧美女激情福利| 国产盗摄——sm在线视频| 国产精品欧美一区二区三区不卡| 亚洲资源网站| 蜜桃久久av一区| 三级在线观看一区二区| 亚洲女同中文字幕| 久久国产亚洲精品| 欧美不卡高清一区二区三区| 精品一区二区三区免费看| 国产日韩欧美在线播放不卡| 婷婷亚洲成人| 一区二区高清| 亚洲香蕉视频| 尤物精品在线| 日韩中文视频| 欧美三区四区| 91精品久久久久久久久久不卡|