对* ngFor使用带有三元运算符的自定义管道

时间:2019-09-24 05:34:25

标签: angular

我正在为*ngFor使用带有三元运算符的自定义管道,但出现错误。不知道如何解决。请帮忙。

html:

<div *ngFor="let x of y | limitTo: y.limit ? y.length : 10">

truncate.pipe.ts:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'limitTo'
})
export class TruncatePipe {
  transform(value: string, limit:number) : string {
    let trail = '...';

    return value.length > limit ? limit + trail : value;
  }
}

app.module.ts:

import { NgModule }      from '@angular/core';
import {  TruncatePipe }   from './truncate.pipe';

@NgModule({
  imports:      [
  ],
  declarations: [
    TruncatePipe
  ],
  exports: [ 
  ]
})

export class AppModule { }

错误:

  

找不到类型为“字符串”的其他支持对象“ 10 ...”。 NgFor仅支持绑定到Iterables,例如Arrays。在html文件中

3 个答案:

答案 0 :(得分:1)

您正在将字符串传递给ngFor,但不接受。确保您通过数组。即“ x”应为数组

答案 1 :(得分:0)

您正在将整个数组传递到管道。 如果length低于限制,它将返回数组不变。 否则,它将返回数组长度,后跟Trail。

您最有可能拥有一个数组y = ['str-1', 'str-2', 'str-3'...] 您的管道通话是limitTo: y.limit ? y.length : 10 如果y值没有限制字段或为0,则默认为10。

在您的问题管道中调用了参数value = y和limit = 10 线索是“ ...”;

如果数组y的长度小于限制(在此示例中为10,则为false) 最终将返回不变的数组。

否则,它将返回limit + trail等于10 +'...'。 这是一个字符串。

字符串不可迭代,因此您将收到错误。

答案 2 :(得分:0)

谢谢大家

解决方案:

cs_matrix <- function (x) {

  cs.mat <- matrix(rep(0,dim(x)[1]^2), ncol = dim(x)[1])

  for (i in 1:dim(x)[1]){

    for (j in 1:dim(x)[1]){

      cs.mat[i,j] <- 1 - (sum(x[i,] == x[j,]) / dim(x)[2])
    }
  } 
  return(cs.mat)
}