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

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

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

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

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

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

于是我到組件庫(kù)源碼里去找原因,并寫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值傳過(guò)去了,所以之前的清空值操作就被覆蓋了。
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 使組件庫(kù)內(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í)組件庫(kù)單選radio本身是不支持取消選擇的,正解應(yīng)該是用checkbox實(shí)現(xiàn)相關(guān)的業(yè)務(wù)邏輯才對(duì),但很久之前的業(yè)務(wù)邏輯涉及到很多地方的修改,此時(shí)再換checkbox并且換樣式的話,改動(dòng)的還是比較大的,就先簡(jiǎn)單解決這個(gè)問(wèn)題。

標(biāo)簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲最大av| 激情久久五月| 蜜桃视频第一区免费观看| 五月天久久久| 亚洲一区二区三区高清不卡| 欧美日韩国产亚洲一区| 激情久久久久久久| 国产精品美女| 亚洲一区导航| 日韩在线观看中文字幕| 天堂va在线高清一区| 日本少妇一区二区| 久久av影院| 麻豆91在线播放| 久久久久久自在自线| 日韩精品一区二区三区免费观影| 国精品一区二区| 亚洲视频电影在线| 国产日产精品一区二区三区四区的观看方式| 清纯唯美亚洲综合一区| 精品一区二区三区亚洲 | 视频一区在线播放| 午夜久久av| 欧美激情 亚洲a∨综合| 欧美日韩视频网站| 亚洲午夜视频| 视频一区中文字幕精品 | 精品国产欧美日韩一区二区三区| 欧美丰满日韩| 亚洲精品小说| 日韩av影院| 精品亚洲成人| 欧美日韩在线播放视频| 亚洲网址在线观看| 麻豆传媒一区二区三区| 亚洲性视频h| 五月激激激综合网色播| 你懂的亚洲视频| 亚洲午夜黄色| 国产精品自在| 久久电影tv| 日本大胆欧美人术艺术动态| 国产精品一级| 亚洲小说欧美另类婷婷| 91欧美日韩在线| 91亚洲人成网污www| 天堂va蜜桃一区二区三区| 国产精品1区| 免费久久久久久久久| 91精品日本| 亚洲电影有码| 日韩国产精品久久久| 美女av在线免费看| 一区二区日韩免费看| 国产一区二区三区视频在线| 国产精品7m凸凹视频分类| 国产色99精品9i| 欧美+日本+国产+在线a∨观看| 777久久精品| 欧美 日韩 国产一区二区在线视频| 欧美亚洲综合视频| 久久在线免费| 国产精品欧美一区二区三区不卡| 欧美久久精品一级c片| 国产亚洲人成a在线v网站 | 亚洲一区二区动漫| 国产aⅴ精品一区二区三区久久| 免费在线观看成人| 国产中文欧美日韩在线| 只有精品亚洲| 久久国产免费| 加勒比视频一区| 日韩有吗在线观看| 欧美日韩国产亚洲一区| 福利片在线一区二区 | 亚洲欧美日韩国产一区二区| 国产精品99一区二区三| 天堂精品久久久久| 午夜精品网站| 另类专区亚洲| 国产精品一页| 日韩精品乱码av一区二区| 999国产精品永久免费视频app| 国产日韩一区| 亚洲最新av| 99日韩精品| 成人va天堂| 精品免费av一区二区三区| 日本aⅴ免费视频一区二区三区| 婷婷成人综合| 大香伊人久久精品一区二区| 日产欧产美韩系列久久99| 自拍日韩欧美| 久久蜜桃av| 高清不卡亚洲| 精品久久久亚洲| 国产精品毛片久久久| 久久都是精品| aa国产精品| 激情五月色综合国产精品| 日韩欧美午夜| 国产精选在线| 精品国产亚洲一区二区在线观看| 国产欧美日韩一区二区三区四区 | 欧美亚洲自偷自偷| 免费在线欧美视频| 视频精品一区二区| 中文一区二区| 红桃视频亚洲| 免费精品国产| 亚洲欧美日韩高清在线| 91精品国产福利在线观看麻豆| 国产成人77亚洲精品www| 美女性感视频久久| 国产精品115| 欧美激情在线精品一区二区三区| 国产精品成人3p一区二区三区| 国产调教精品| 国产精品成人3p一区二区三区| 久久激情综合网| 日韩va亚洲va欧美va久久| 亚洲免费成人av在线| 亚洲+小说+欧美+激情+另类| 涩涩涩久久久成人精品| 美女视频网站久久| 国产成人精品一区二区三区视频 | 精品三级久久| 日韩精品诱惑一区?区三区| 中文字幕在线视频网站| 国产传媒在线| 日本午夜精品| 国产精品亚洲二区| 国产精品激情电影| 久久精品国产亚洲aⅴ| 国产在线视频欧美一区| 精品三区视频| 国产精品久久观看| 亚洲91久久| 久久先锋影音| 日日夜夜免费精品视频| 国产精选久久| 国产66精品| 蜜桃tv一区二区三区| 久热综合在线亚洲精品| 日韩av成人高清| 国产精品亚洲综合色区韩国| 精品三级在线| 亚洲大片在线| 蜜臀精品久久久久久蜜臀| 日韩高清中文字幕一区| 国产精品15p| 999精品一区| 亚洲三级网址| 麻豆一区二区在线| 欧美羞羞视频| 亚洲在线成人| 日本va欧美va精品| 高清一区二区三区| 在线国产一区二区| 日韩国产欧美视频| 国产精品丝袜在线播放| 国产一区国产二区国产三区| 99成人在线视频| 亚洲男人在线| 色综合狠狠操| 在线一区免费| 久久激情av| 99国产精品免费视频观看| 亚洲三级在线| 国产一区二区三区不卡av| 国产综合亚洲精品一区二| 亚久久调教视频| 四虎成人av| 久久国产精品久久久久久电车 | 蜜臀久久久久久久| 精品亚洲自拍| 午夜在线视频观看日韩17c| 国产欧美亚洲一区| 亚洲午夜av| 欧美日韩一区二区国产 | 岛国av免费在线观看| 性欧美精品高清| 麻豆一区二区三| 亚洲一区二区毛片| 久久精品国产在热久久| 热久久免费视频| www.51av欧美视频| 亚洲精品乱码| 精品三级久久久| 日韩中文字幕视频网| 日韩黄色大片网站| 日韩av不卡一区二区| 999久久久91| 国产精品一区二区三区av麻| 亚洲性色视频| 国产一区2区| 日韩av网站在线免费观看| 自由日本语亚洲人高潮| 国产不卡一区| 欧美一级全黄|