Angular2 RC6管道。我可以在与我的组件相同的.ts文件中声明管道吗?

时间:2016-09-04 19:53:45

标签: angular

我是否必须在@ngModule中注册每个管道?我有一个仅由单个特定组件使用的。很高兴在同一个文件中声明它,所以没有其他人知道它。 我相信以前是可能的 - 只是找不到合适的语法。

谢谢。

2 个答案:

答案 0 :(得分:7)

必须在模块中声明每个管道,组件和指令。这是因为编译器依赖于模块的声明来解析模板。如果模块的声明(或导入模块的声明)中没有看到MyPipe,那么在模板中使用管道时它不会查找它也不会识别它

如果重要的是没有其他组件能够看到您的管道,请创建一个仅包含使用管道和管道本身的组件的模块,并且不要导出管道。

import { NgModule }      from '@angular/core';
import { CommonModule }  from '@angular/common';
import { MyPipe }        from './my.pipe';
import { MyComponent }   from './my.component';

@NgModule({
  imports:      [ CommonModule ],
  declarations: [ MyComponent, MyPipe ],
  exports:      [], // don't export what you want to keep private
  providers:    []
})
export class MyModule { }

答案 1 :(得分:1)

自RC6起,ComponentTypeMetadata属性已从NgModule中移除,您必须在<?php $data = <<<DATA <div> <p>These line shall stay</p> <p class="myclass">Remove this one</p> <p>But keep this</p> <div style="color: red">and this</div> </div> DATA; $dom = new DOMDOcument(); $dom->loadHTML($data, LIBXML_HTML_NOIMPLIED); $dom->removeChild($dom->doctype); $xpath = new DOMXPath($dom); $lines_to_be_removed = $xpath->query("//*[count(@*)>0]"); foreach ($lines_to_be_removed as $line) { $line->parentNode->removeChild($line); } // just to check echo $dom->saveHTML(); ?> 中注册。