错误类型错误:无法读取未定义的属性“切片”---Typescript

Posted

技术标签:

【中文标题】错误类型错误:无法读取未定义的属性“切片”---Typescript【英文标题】:ERROR TypeError: Cannot read property 'slice' of undefined---Typescript 【发布时间】:2018-07-18 22:26:48 【问题描述】:

你好吗? 我的项目中有一个未定义的问题“切片”。我使用自动补全材料https://material.angular.io/components/autocomplete/examples

我的代码.ts //从webservice获取所有国家

this.ws.AllCountry().subscribe(
      countryes => 
        this.countryes = countryes.map((country) => 
          return new Country(country);
        );
      
    );

// 创建过滤器选项

   this.stateCtrl = new FormControl();
    this.filteredOptionsCountry = this.stateCtrl.valueChanges
      .pipe(
      startWith(''),
      map(country =>  country ? this.filterCountry(country) : this.countryes.slice()) // Cannot read property 'slice' of undefined
    );

// 过滤国家

 filterCountry(name: string) 
    return this.countryes.filter(country =>
      country.name.toLowerCase().indexOf(name.toLowerCase()) === 0);
  

代码.html

 <form class="example-form">
     <mat-form-field class="example-full-width">
     <input matInput placeholder="Select Country" aria-label="State" [matAutocomplete]="auto" [formControl]="stateCtrl">
       <mat-autocomplete #auto="matAutocomplete">
         <mat-option *ngFor="let country of filteredOptionsCountry | async" [value]="country.country_id">
            country.name 
         </mat-option>
       </mat-autocomplete>
     </mat-form-field>
   </form>

你能给我一些建议吗,有什么问题?

谢谢

【问题讨论】:

消息告诉错误在哪里......countryes显然是undefined,你需要调试你的代码;) 如果你能重现这就像 stackblitz 之类的东西会很容易 slice() 需要参数developer.mozilla.org/en-US/docs/Web/javascript/Reference/… slice() 等于 slice(0) 【参考方案1】:

我认为您在订阅中定义之前使用国家/地区,我建议将您的“创建过滤器选项”代码移动到定义国家/地区的 allCountry 订阅中

【讨论】:

Create FilterOptions 在构造函数中。 this.ws.AllCountry().subscribe() 在 ngOnInit() 中【参考方案2】:

试试这个...

map((country: string | null) => country ? this._filter(country) : this.countryes.slice()));

【讨论】:

以上是关于错误类型错误:无法读取未定义的属性“切片”---Typescript的主要内容,如果未能解决你的问题,请参考以下文章

无法读取未定义类型错误的属性“推送”:无法读取未定义错误的属性“推送”

错误:`未捕获(承诺中)类型错误:无法读取未定义的属性'doc'`

未捕获的类型错误:无法读取未定义的属性“区域”?

JQuery:未捕获的类型错误:无法读取未定义的属性“调用”

未捕获的类型错误:无法读取未定义的属性 toLowerCase

错误类型错误:无法读取未定义的属性“匹配”