首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Material.Angular.io mat-autocomplete [displayWith]函数更新作用域变量

Material.Angular.io mat-autocomplete [displayWith]函数更新作用域变量
EN

Stack Overflow用户
提问于 2018-03-08 06:14:20
回答 2查看 2.1K关注 0票数 2

我遇到了一个问题,我可以在实例化mat-autocomplete的组件控制器中访问本地声明的变量。我面临的问题是局部变量被困在这个作用域中,我无法更新它们。

关于更新mat-autocomplete作用域变量的任何想法或想法。

最终,我要做的是连接显示字符串和绑定到输入模型的变量。这给了我一个自动完成输入,为用户添加帮助文本,理想情况下,文本是最新的清除输入。文本当前正在连续连接,很快就会创建不能使用的文本

html

代码语言:javascript
复制
  <input
   [(ngModel)]="filter>

  mat-autocomplete
    #auto="matAutocomplete" 
    [displayWith]="displayFn">
    <mat-option
      *ngFor="let option of filteredOptions | async"
      [value]="option">
      {{ option }}
    </mat-option>
  </mat-autocomplete>

component.ts

代码语言:javascript
复制
  displayFn(search): string | undefined {
    if(!search) return; //check if the search isn't already populated
    if(!search.match(/(=|\*)/)){
      if(this.filter){
        this.filter += ' ' + search + '==*term*';
      }else{
        this.filter = search +'==*term*';

      }
      return this.filter; //this isn't persisting across the lifecycle
    }
  }
EN

回答 2

Stack Overflow用户

发布于 2019-02-05 20:54:44

你有两种选择,第一种是调用[displayWith]="displayFn.bind(this)",看起来很糟糕,但我可以确认这是有效的(尽管我在WebStorm上收到了一个错误,说"ng:未知方法绑定“),第二种是使用箭头函数来保留上下文。如下所示:

代码语言:javascript
复制
displayFn(offer?: Offer): string | undefined {
    return offer && offer.name == this.currentOffer.name ? offer.name : undefined;
}

displayFnWrapper() {
   return (offer) => this.displayFn(offer);
}

在模板中:

代码语言:javascript
复制
<mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFnWrapper()" (optionSelected)='assign($event.option.value)'>
    <mat-option *ngFor="let offer of filteredOffers$ | async" [value]="offer">{{ offer.name }}</mat-option>
</mat-autocomplete>
票数 7
EN

Stack Overflow用户

发布于 2022-02-08 18:39:14

如果我使用一个例子,MyClass,其中

@Input() modeCity = false;

在ngOnInit()中,我可以访问并更改modeCity。它反映在类中的其他方法上。

在HTML中,

然后对于方法itemDisplayFn(项目:..)在ts文件中,modeCity未定义。

我发现不知何故,itemDisplayFn()方法有静态上下文。因此我创建了这个属性,

静态staticModeCity = false;

可以像这样在ngOnInit()中设置staticModeCity,

MyClass.staticModeCity = true

并在方法itemDisplayFn()中使用,如下所示

if(MyClass.staticModeCity) ....

我不知道为什么会这样。当然,如果同一组件在同一父组件中多次使用,则静态可能会发生冲突。

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

https://stackoverflow.com/questions/49162076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档