相关疑难解决方法(0)

Angular - 不纯的管道 vs 功能

我正在 Angular2 中的数组上实现过滤操作。当数组中的元素发生变化时,不会触发纯管道。因此,我必须使用不纯的管道或使用组件内部的函数进行过滤,如下所示。

*ngFor="let item of items | impureFilterPipe"
Run Code Online (Sandbox Code Playgroud)

或者,

<!-- component.html -->
*ngFor="let item of filterFunction(items)"

// component.ts
sortFunction(items) { return items.sort(); }
Run Code Online (Sandbox Code Playgroud)

据我所知,在模板中绑定函数在性能方面是不好的。但是,我看不出使用不纯管道而不是函数有什么区别。我想知道的是,上述两种方法之间的性能有什么不同吗?

data-binding angular-pipe angular angular-changedetection

5
推荐指数
1
解决办法
1111
查看次数

自定义管道实例在哪里?组件代码如何访问在其 HTML 中使用的自定义管道实例?

我在组件的 HTML 部分使用了一个自定义管道。它在模块中声明:

  declarations: [  I18nPipe ],
Run Code Online (Sandbox Code Playgroud)

我希望能够从组件代码(而不是transform方法)调用它的方法。

我希望管道实例位于依赖注入上下文中的某个地方,以便我可以抓住它。但是我错了。如果我将它注入到组件的构造函数中(例如,像任何普通服务一样):

  constructor(private i18nPipe: I18nPipe)  
Run Code Online (Sandbox Code Playgroud)

然后我得到一个错误:没有提供者。所以我将它包含在providers同一模块的部分中:

  providers: [ I18nPipe ]
Run Code Online (Sandbox Code Playgroud)

然后我将可以在组件代码中访问它,但是我的自定义管道会有两个实例。

  1. 创建者providers,在 DI 上下文中可用。在构造函数中注入时,我将获得此实例,因此我将在我的组件代码中使用此实例。

  2. 在 HTML 中使用的实例。它在哪里生活?我想在我的组件代码中访问这个实例,而不是“提供的”一个;我怎样才能获得它?

angular2-di angular2-custom-pipes angular

2
推荐指数
1
解决办法
1355
查看次数