RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-293107

elie_'s questions

Martin Hope
elie_
Asked: 2020-09-12 21:19:00 +0000 UTC

使用自动完成过滤表单字段

  • 0

表单包含自动完成字段。当一个元素被选中时,它应该从下拉列表中消失,并在移除芯片时重新添加。如何重构listeningControls()以摆脱重复代码?有一个想法是将 valueChanges 挂parentFormGroup在管道上和管道中,以过滤掉没有交互的控件。但是没有了解如何区分这些控件

Angular Material 文档中重新设计的示例

export class ChipsAutocompleteExample {
  visible = true;
  selectable = true;
  removable = true;

  fruitCtrl = new FormControl();
  filteredFruits: Observable < string[] > ;
  fruits: string[] = ['Lemon'];
  allFruits: string[] = ['Apple', 'Lemon', 'Lime', 'Orange', 'Strawberry'];

  cityCtrl = new FormControl();
  filteredCityList: Observable < string[] > ;
  allCity: string[] = ['LA', 'Chicago', 'London', 'Milan'];
  cityList: string[] = ['Chicago'];

  @Input() parentFormGroup: FormGroup;

  @ViewChild('fruitInput', {
    static: false
  }) fruitInput: ElementRef < HTMLInputElement > ;
  @ViewChild('cityInput', {
    static: false
  }) cityInput: ElementRef < HTMLInputElement > ;

  constructor(private fb: FormBuilder) {
    this.createControlForAutocomplete();
    this.listeningControls();
  }

  listeningControls(): void {
    this.filteredFruits = this.parentFormGroup.get('fruit').pipe(
      startWith(null),
      map((fruit: string | null) => fruit ? this._filter(fruit, 'fruit') : this.allFruits.slice()),
      map(fruits => fruits.filter(fruit => !this.fruits.includes(fruit))),
    );

    this.filteredCityList = this.cityCtrl.valueChanges.pipe(
      startWith(null),
      map((city: string | null) => city ? this._filter(city, 'city') : this.allCity.slice()),
      map(cityList => cityList.filter(city => !this.cityList.includes(city))),
    );
  }
  createControlForAutocomplete(): void {
    this.fruitCtrl = this.fb.control('');
    this.cityCtrl = this.fb.control('');
  }

  remove(value: string, ctrlName: string): void {
    const control = this.parentFormGroup.get(ctrlName);
    const index = control.value.indexOf(value);

    if (index > -1) {
      const temp = [...control.value];
      temp.splice(index, 1);
      control.setValue([...temp]);
    }
  }

  selected(event: MatAutocompleteSelectedEvent, ctrlName: 'fruit' | 'city'): void {
    const control = this.parentFormGroup.get(ctrlName);
    const temp = [...control.value, event.option.value];
    control.setValue(temp);
    (this[ctrlName + 'Input'] as ElementRef < HTMLInputElement > ).nativeElement.value = '';
  }
}

private _filter(value: string, ctrlName: 'fruit' | 'city'): string[] {
  const currentControl = this[ctrlName];
  const selectedItems = this.parentFormGroup.get(ctrlName).value;

  if (!value) {
    return currentControl.slice();
  }

  currentControl.filter(item => item.toLowerCase().includes(value));

  return currentControl.filter(item => {
    return item !== value && !selectedItems.includes(item);
  });

}
}
<mat-form-field class="example-chip-list">
  <mat-chip-list #chipFruitList aria-label="Fruit selection">
    <mat-chip *ngFor="let fruit of fruits" [selectable]="selectable" [removable]="removable" (removed)="remove(fruit)">
      {{fruit}}
      <mat-icon matChipRemove *ngIf="removable">cancel</mat-icon>
    </mat-chip>
    <input placeholder="New fruit..." #fruitInput [formControl]="fruitCtrl" [matAutocomplete]="auto" [matChipInputFor]="chipFruitList">
  </mat-chip-list>
  <mat-autocomplete #auto="matAutocomplete" (optionSelected)="selected($event, 'fruit')">
    <mat-option *ngFor="let fruit of filteredFruits | async" [value]="fruit">
      {{fruit}}
    </mat-option>
  </mat-autocomplete>
</mat-form-field>

<mat-form-field class="example-chip-list">
  <mat-chip-list #chipCityList aria-label="City selection">
    <mat-chip *ngFor="let city of cityList" [selectable]="selectable" [removable]="removable" (removed)="remove(city)">
      {{city}}
      <mat-icon matChipRemove *ngIf="removable">cancel</mat-icon>
    </mat-chip>
    <input placeholder="New city..." #cityInput [formControl]="cityCtrl" [matAutocomplete]="autoCity" [matChipInputFor]="chipCityList">
  </mat-chip-list>
  <mat-autocomplete #autoCity="matAutocomplete" (optionSelected)="selected($event, 'city')">
    <mat-option *ngFor="let city of filteredCityList | async" [value]="city">
      {{fruit}}
    </mat-option>
  </mat-autocomplete>
</mat-form-field>

angular
  • 1 个回答
  • 10 Views
Martin Hope
elie_
Asked: 2020-03-18 22:58:23 +0000 UTC

为对象设置值

  • 1

如何设置属性值name?

键入'{名称:字符串;}' 不可分配给类型 'Item'。类型 '{ name: string; 中缺少属性 'created' }'。

export class Items extends BaseModelVersion {
  name: string;
}

export class ItemsComponent {
  item: Items = {
    name: 'items_name'
  };

  items: Items[] = [this.item];
}

typescript
  • 1 个回答
  • 10 Views
Martin Hope
elie_
Asked: 2020-03-10 04:40:28 +0000 UTC

你使用代码审查工具吗?[关闭]

  • 2
关闭。这个问题不可能给出客观的答案。目前不接受回复。

想改进这个问题? 重新构建问题,以便可以根据事实和引用来回答。

3年前关闭。

改进问题

对这个问题感兴趣,是否有人将审查工具用作团队工作的一部分?什么?为什么是他们?审查在贵公司如何运作?

инспекция-кода
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5