我正在为*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文件中
答案 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)
}