错误:Property&#39; pipe&#39;在类型&#39; Observable <any>&#39;上不存在

时间:2017-12-07 16:05:16

标签: angular typescript

我复制粘贴其中一个例子:

https://material.angular.io/components/autocomplete/overview

HTML:

<form class="example-form">
  <mat-form-field class="example-full-width">
    <input type="text" placeholder="Pick one" aria-label="Number" matInput [formControl]="myControl" [matAutocomplete]="auto">
    <mat-autocomplete #auto="matAutocomplete">
      <mat-option *ngFor="let option of filteredOptions | async" [value]="option">
        {{ option }}
      </mat-option>
    </mat-autocomplete>
  </mat-form-field>
</form>

TS:

import {Component} from '@angular/core';
import {FormControl} from '@angular/forms';
import {Observable} from 'rxjs/Observable';
import {startWith} from 'rxjs/operators/startWith';
import {map} from 'rxjs/operators/map';

/**
 * @title Filter autocomplete
 */
@Component({
  selector: 'autocomplete-filter-example',
  templateUrl: 'autocomplete-filter-example.html',
  styleUrls: ['autocomplete-filter-example.css']
})
export class AutocompleteFilterExample {

  myControl: FormControl = new FormControl();

  options = [
    'One',
    'Two',
    'Three'
  ];

  filteredOptions: Observable<string[]>;

  ngOnInit() {
    this.filteredOptions = this.myControl.valueChanges
      .pipe(
        startWith(''),
        map(val => this.filter(val))
      );
  }

  filter(val: string): string[] {
    return this.options.filter(option =>
      option.toLowerCase().indexOf(val.toLowerCase()) === 0);
  }

}

CSS:

.example-form {
  min-width: 150px;
  max-width: 500px;
  width: 100%;
}

.example-full-width {
  width: 100%;
}

但是我收到了这个错误:

  

编译失败:Property&#39; pipe&#39;在类型&#39; Observable&#39;。

上不存在

知道为什么吗?

4 个答案:

答案 0 :(得分:1)

确保使用的是最新版本的rxjs@5.x.x和angular。

https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md

答案 1 :(得分:0)

我在您的代码中发现问题,即

myControl: FormControl = new FormControl();

从此行中删除“ FormControl”。实际上,您正在定义其“类型”,但是对于“ new FormControl()”而言,它不存在,我想知道为什么“ tslint”在您的代码中没有给出错误。无论如何,再次看到https://material.angular.io/components/autocomplete/overview,这里的角度也不像您粘贴在这里的代码那样。

答案 2 :(得分:0)

  

请检查RxJS版本兼容性。

     

正如我确实通过您的代码,发现正确和工作。请看   version of RxJS should be > 5.5

答案 3 :(得分:-2)

根据您上面的评论,您似乎只是想要订阅FormControl上发生的值更改。试试这个:

private void BtnConect_OnClicked(object sender, EventArgs e)
{
    activityIndicatorLogin.IsRunning = true;
    Task.Delay(1000).ContinueWith(t => TEST());
}

protected void TEST()
{
    activityIndicatorLogin.IsRunning = false;
    DisplayAlert("tiitle test", "messsage test", "close");
}

不完全确定你的意图是什么,但至少应该开始向你吐出更改值。