【问题标题】:stringLowerCase filter to apply on ngFor应用于 ngFor 的 stringLowerCase 过滤器
【发布时间】:2019-07-16 04:25:20
【问题描述】:

我在我的应用程序中定义了一个管道示例,它将大写字符串转换为小写例如:'Activities' => 'activities'。数据采用数组格式,我在*ngFor 上应用此过滤器。它返回一个错误,说“toLowerString 不是函数”,请帮助我了解我哪里出错了。

Demo link

【问题讨论】:

  • 你为什么不简单地使用预先定义的 angular 为小写的管道?示例:让标题的标题|小写
  • @SoujanyaJ 我认为你需要{{ Abc | lowercase}} 检查这个stackblitz.com/edit/…
  • @ThanveerShah 没看错,这是链接,angular.io/api/common/LowerCasePipe#lowercasepipe
  • @Soujanya - 你应该使用像 {{option |小写}} 而不是在数组上创建复杂的管道。让您的项目更简单、更快捷
  • 感谢您的所有回复,我实际上正在尝试构建一个表格组件。而我想将col转换为小写是为了映射到我的数据集,从而构造记录。能否请您看一下更新后的源代码。

标签: javascript angular pipe


【解决方案1】:

请注意,.toLowerCase() 仅可用于 string 数据类型。也就是说,您需要确保数据是string 与:.toString()

value.toString().toLowerCase()

既然Thanveer Shah 已经在comment 中说过,您可以使用内置的| lowercase 来转换为字符串。

请参阅Fork 了解正在使用的两个版本。


澄清: 特意使用如下代码:

export class LowerCasePipe implements PipeTransform {
  transform(value) {
    console.log(value.toString().toLowerCase());
    for (let i = 0; i < value.length; i++) {
      value[i] = value[i].toString().toLowerCase();
    }
    return value;
  }
}

显示数据是一个数组。

但如果你已经知道它是一个数组,你可以简单地使用:

export class LowerCasePipe implements PipeTransform {
 transform(value: Array<string>) {
      return value.map((x)=>{ return x.toLowerCase() })
    }
}

other answer 中的Ferhad Othman

【讨论】:

  • 非常感谢,我明白了你的意思,但我实际上是在尝试构建一个表格组件。而我想将col转换为小写是为了映射到我的数据集,从而构造记录。能否请您看一下更新后的源代码。
  • 简单。只需在那里实现我的方法,请参阅forked update
  • 我得到了所需的输出,小问题,当我已经处于循环中时,即 NgFor,需要在 pip 转换函数中添加另一个 for 循环吗?我们可以只传递文本参数并将其转换为小写并发送回。我不明白这背后的原因。
  • 老实说没有真正的需要。这只是为了让您更容易知道数据类型实际上是一个数组。
  • @Mykyuu 我很高兴知道原因。
【解决方案2】:

你不能使用value.toLowerCase(),因为值似乎是一个数组而不是一个字符串。因此,该值必须是数组类型而不是字符串,并且您必须返回一个数组而不是 console.log。 试试这个:

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

@Pipe({ 
    name: 'stringLowerCase' 
})
export class LowerCasePipe implements PipeTransform {
    transform(value: Array<string>) {
      return value.map((x)=>{ return x.toLowerCase() })
    }
}

【讨论】:

  • 已经存在lowercase管道;那为什么还要麻烦:-) angular.io/api/common/LowerCasePipe#lowercasepipe
  • 在这个链接中使用的不是 *ngFor 表达式
  • 我的意思是在 *ngFor 之后通常结果应该打印在模板{{output}} 中,所以在这种情况下简单的管道可以正常工作。而是在模块中创建管道并注册,以便提供进一步的依赖项
  • 我知道,但我回答了他的问题,我解决了他想要做的事情。
【解决方案3】:

您必须像下面这样应用您的自定义管道,它才会起作用。

 <ul>
        <li *ngFor="let caption of captions ">
            {{caption | stringLowerCase }}
        </li>
    </ul>

并且在您的管道中返回值转换后如下所示。

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

@Pipe({ 
    name: 'stringLowerCase' 
})
export class LowerCasePipe implements PipeTransform {
    transform(value: string) {
        console.log(value.toString().toLowerCase());
        return value.toLowerCase();
    }
}

Here is forked solution

【讨论】:

  • 为什么不使用内置的lowercase pipe :)
  • 是的,但他可能会做一些额外的字符串操作,然后自定义管道更有用
【解决方案4】:
<li *ngFor="let caption of captions">
    {{caption | lowercase }}
</li>

<li *ngFor="let caption of captions">
    {{caption | uppercase }}
</li>

<li *ngFor="let caption of captions">
    {{caption | titlecase }}
</li>

【讨论】:

  • 感谢您的所有回复,我实际上正在尝试构建一个表格组件。而我想将col转换为小写是为了映射到我的数据集,从而构造记录。请查找更新后的源代码。
  • 我正在寻找 titlecase 我在文档中看到它 - 我在那里添加了它。它可能对某人有所帮助。
【解决方案5】:
<li *ngFor="let caption of captions">
    {{caption | lowercase }}
</li>

【讨论】:

  • 虽然此代码可能是解决方案,但作为一个很好的答案,它确实需要解释其工作原理。
猜你喜欢
  • 2018-02-26
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 2021-08-12
相关资源
最近更新 更多