成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Angular組件庫ng-zorro-antd實現radio單選框選擇

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

antd組件庫升級之后代碼不生效

項目業務之前的代碼設計了類似radio單選框取消選擇的相關邏輯,用的是下面類似的代碼實現的。但近期對ng-zorro-antd組件庫升級之后,下面的代碼不生效了。

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打斷點調試

  • 將nz-radio-group綁定的radioValue值清空會首先走group組件下面的邏輯
writeValue(value: NzSafeAny): void {
    this.value = value;
    this.nzRadioService.select(value);
    this.cdr.markForCheck();
  }
  • nz-radio 和 nz-radio-group都是共用這個NzRadioService,且組件內init時都有對selected$這個流做監聽
@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();
      });
  • 當監聽完值改變后,后面又執行了radio的click事件,把點擊哪個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 使組件庫內部先執行完click后續再執行。

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 = ""
    })
  }
}
}

總結

其實組件庫單選radio本身是不支持取消選擇的,正解應該是用checkbox實現相關的業務邏輯才對,但很久之前的業務邏輯涉及到很多地方的修改,此時再換checkbox并且換樣式的話,改動的還是比較大的,就先簡單解決這個問題。

標簽: JavaScript
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
五月激情六月综合| 色综合天天做天天爱| 99re8在线精品视频免费播放| 色婷婷国产精品| 亚洲精品日日夜夜| 伊人天天综合| 久久精品夜夜夜夜久久| 大尺度一区二区| 在线观看日韩高清av| 五月综合激情婷婷六月色窝| 99pao成人国产永久免费视频| 一区在线中文字幕| 一区在线视频| 中文字幕不卡的av| 欧美精品一区二区视频| 久久久不卡网国产精品二区 | 一区二区三区四区在线免费观看| 亚洲小说欧美另类婷婷| 国产精品乱人伦中文| 欧美三级午夜理伦三级中文幕| 国产亚洲欧洲一区高清在线观看| 成人午夜在线免费| 欧美一区二区在线不卡| 国产成人午夜视频| 日韩一区二区三区在线观看| 国产精品一区专区| 欧美一二三四区在线| 成人av午夜电影| 久久这里都是精品| 972aa.com艺术欧美| 国产午夜亚洲精品羞羞网站| 国产精品二区二区三区| 亚洲色图欧美偷拍| 国产精品美女黄网| 爽爽淫人综合网网站| 色噜噜久久综合| 日本欧美大码aⅴ在线播放| 在线观看国产一区二区| 国内精品伊人久久久久av影院| 在线综合视频播放| 成人高清视频在线观看| 久久网站热最新地址| 国产精品成人观看视频免费| 亚洲精品国产精华液| 美女亚洲精品| 精油按摩中文字幕久久| 91精品国产乱| 97国产一区二区| 中文字幕的久久| 国产偷久久久精品专区| 日韩精品免费视频人成| 欧美日韩在线免费视频| 国产乱码一区二区三区| 2021中文字幕一区亚洲| 国产在线精品一区二区中文| 一区二区高清在线| 在线精品视频免费播放| 粉嫩在线一区二区三区视频| 久久精品亚洲麻豆av一区二区| 狠狠入ady亚洲精品| 亚洲图片一区二区| 欧美最新大片在线看| 国产成人免费在线视频| 久久精品这里都是精品| 亚洲免费播放| 日本不卡视频在线| 69av一区二区三区| 欧美国产91| 亚洲国产精品麻豆| 欧美日韩国产综合一区二区三区| 成人福利电影精品一区二区在线观看| 国产精品久久久久影院色老大| 久久综合导航| 丁香桃色午夜亚洲一区二区三区| 国产日本亚洲高清| 美日韩免费视频| 粉嫩aⅴ一区二区三区四区五区| 国产欧美日韩不卡免费| 国产日韩久久| 韩日精品视频一区| 国产日韩欧美制服另类| 国产日韩一区二区三区在线| 久久电影网站中文字幕| 久久久国产午夜精品 | 狠狠久久亚洲欧美| 国产精品免费丝袜| 在线亚洲一区二区| 91色|porny| 日本欧美肥老太交大片| 久久精品视频一区二区三区| 久久亚洲免费| 成人黄色av电影| 亚洲一区二区三区四区中文字幕| 欧美日韩你懂得| 欧美日韩国产亚洲一区| 偷拍与自拍一区| 久久夜色精品国产噜噜av| 久久久久久久欧美精品| 色综合网色综合| 蜜臀va亚洲va欧美va天堂| 国产精品久久久久久久久久久免费看 | 亚洲影院理伦片| 日韩一卡二卡三卡国产欧美| 一区二区三区四区五区在线| 国产黄人亚洲片| 依依成人综合视频| 欧美精品一区二区高清在线观看| 性8sex亚洲区入口| 91蝌蚪porny九色| 久久不见久久见免费视频1| 亚洲欧洲精品一区二区三区| 欧美精品日韩综合在线| 亚洲每日更新| 成人av网站大全| 日本午夜精品视频在线观看| 亚洲欧洲在线观看av| 欧美一区二区三区四区五区| 中文高清一区| 91社区在线播放| 久久99久久久欧美国产| 亚洲三级电影全部在线观看高清| 91精品国产麻豆国产自产在线 | 欧美日韩妖精视频| 国产精品自在在线| 香港成人在线视频| 国产精品三级视频| 日韩欧美国产1| 一本高清dvd不卡在线观看| 欧美日韩一区二区三区四区在线观看 | 久久99国产精品麻豆| ...av二区三区久久精品| 欧美大胆人体bbbb| 欧美在线观看一二区| 国产区二精品视| 欧美另类综合| 亚洲午夜精品国产| 成人av资源在线观看| 久久精品国产精品亚洲精品| 亚洲最大色网站| 中文欧美字幕免费| 欧美videofree性高清杂交| 欧美日韩精品一区视频| 99视频在线精品国自产拍免费观看| 99精品热视频| 国产自产高清不卡| 热久久一区二区| 亚洲愉拍自拍另类高清精品| 中文字幕日韩一区| 国产欧美一区二区三区在线老狼| 91精品欧美福利在线观看| 欧美在线综合视频| 久久一本综合频道| 香蕉亚洲视频| 亚洲在线播放| 国产日韩精品视频一区二区三区| 欧美视频导航| 欧美日韩亚洲国产精品| 欧美激情视频一区二区三区在线播放 | 国产欧美日韩视频一区二区 | 色哟哟国产精品免费观看| 国产欧美91| 影院欧美亚洲| 国产精品二区三区四区| 欧美91视频| 女人色偷偷aa久久天堂| 99精品国产视频| 99国产精品99久久久久久| www.在线成人| 成人综合婷婷国产精品久久蜜臀| 国产精品白丝jk黑袜喷水| 精品影视av免费| 狠狠色综合日日| 韩日欧美一区二区三区| 国产在线精品视频| 极品瑜伽女神91| 国产精品一区二区在线播放| 国产999精品久久| 成人做爰69片免费看网站| 波多野结衣亚洲一区| 成人国产在线观看| 97se亚洲国产综合在线| 欧美不卡视频| 国产精品www.| 欧美三级第一页| 国语精品中文字幕| 亚洲三级视频| 一本色道久久综合亚洲精品高清 | 亚洲女子a中天字幕| 中文字幕人成不卡一区| 亚洲女爱视频在线| 亚洲午夜私人影院| 同产精品九九九| 久久不见久久见中文字幕免费| 国产美女在线精品| 亚洲国产欧美一区二区三区丁香婷| 午夜精品影院在线观看| 日日噜噜夜夜狠狠视频欧美人| 日韩主播视频在线| 久久国产精品99久久久久久老狼| 精品一区二区免费在线观看|