【问题标题】:Creating a custom pipe in Angular 6 to return a value based on an array在 Angular 6 中创建自定义管道以返回基于数组的值
【发布时间】:2018-06-17 09:07:41
【问题描述】:

我正在创建一个似乎不起作用的简单自定义管道:

这是我在 CLI 创建的管道中的代码:- (contain.pipe.ts)

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

@Pipe({
  name: 'contain'
})
export class ContainPipe implements PipeTransform {

  transform(likes: any, term: any): any {

    for (var i = 0; i < likes.length ; i++) {
        if (likes[i] === term) {
            return "liked";
        }else{
            return "";
        }
    }
  }

}

这是我的组件只是尝试输出喜欢与否:- (recipe.component.html)

<h2>{{ [1,12,3] | contain:12}}</h2>

好像没有输出任何数据,即使是真的!

【问题讨论】:

    标签: angular typescript angular6


    【解决方案1】:

    你已经接近了,但请注意,当你 return 来自 for 循环时,你只是停止它,而不是返回每个值。在您的情况下,更合适的方法是创建一个空数组,并将必要的值推送给它,如下所示:

    transform(likes: any, term: any): any {
        var liked = [];
        for (var i = 0; i < likes.length ; i++) {
            if (likes[i] === term) {
                liked.push(term);
            }
        }
        return liked;
    }
    

    这里我只是推送term 值,但您可以根据需要修改此块。这是STACKBLITZ

    【讨论】:

    • 你真是太棒了,谢谢,你有几分钟的时间,我试图在其中传递一个数组,如

      {{ arr$ |包含:recipe.id}}

      ,但我似乎失败了很多次?
    • @MohamedGabr,当然,我会帮忙的。告诉我,arr$recipe.id 是什么?或者更好地 fork 我的 stackblitz 并对其进行修改,这样会更容易提供帮助。
    • 好的,看一下recent-blog-recipes.component,我从我创建的API中获取了数组,我花了很长时间才将它作为数组返回,然后我试图比较每个recipe.id 与该数组。 github.com/Imohamedgabr/recipes-community
    • 这是它在控制台 (3) [1, 2, 12] 中的样子,它是一个数组,但是当我编译“TypeError: Cannot read property 'indexOf' of undefined at ContainPipe.push../src/app/contain.pipe.ts." 但是当我像这样 {{arr$}} 输出它时似乎输出正常,它给出了完整的数组。
    • 这是路径 src/app/welcome/recent-blog-recipes/
    【解决方案2】:

    这是因为,如果在索引 0 处找不到您要查找的术语,您的代码将返回一个空字符串。

    以下循环从索引 0 开始,检查项是否等于当前元素。如果是,则返回liked,如果不是,则返回空字符串。它不会遍历整个数组。

    for (var i = 0; i < likes.length ; i++) {
        if (likes[i] === term) {
            return "liked";
        } else{
            return "";
        }
    }
    

    将您的管道更改为关注

      transform(likes: any, term: any): any {
          return likes.indexOf(term) > -1 ? 'liked': '';
      }
    

    【讨论】:

    • 你真是太棒了,谢谢,你有几分钟的时间,我试图在其中传递一个数组,如

      {{ arr$ |包含:recipe.id}}

      ,但我似乎失败了很多次?
    • @MohamedGabr 是数字数组格式的arr$?内容是什么?
    • 但这如何真正遍历所有喜欢的元素?没有意义
    • @MohamedGabr indexOf 是一种数组方法。它返回您传入的项目的索引,否则返回 -1。
    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 2023-04-04
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多