自定义角度示意图:管道“dasherize”未定义。在角度项目上运行时

Posted

技术标签:

【中文标题】自定义角度示意图:管道“dasherize”未定义。在角度项目上运行时【英文标题】:Custom Angular Schematic: Pipe "dasherize" is not defined. when run on angular project 【发布时间】:2019-09-26 06:46:28 【问题描述】:

我使用角度原理图 cli 创建了一个简单的新原理图。该示意图将名称作为输入,并在树中生成一个文件。我的files/ 目录如下所示:

src/
  app/
    __name@dasherize__.ts

我已经构建了它,然后创建了一个新的 Angular 项目:

ng new test-app --routing --style css

然后我 cd 进入 test-app 目录并链接到我的示例示意图:

npm link ../schematics/sample-schematic

然后我运行我的原理图:

ng g sample-schematic:sample

但是,当我这样做时,我得到了以下错误:

Pipe "dasherize" is not defined. 

如果我将files 目录中的文件名更改为test.ts,它可以正常工作,并创建文件。我猜我缺少一些导入来使用我的测试应用项目中的各种原理图功能。我对test-app 的依赖和开发依赖看起来像:

  "dependencies": 
    "@angular/animations": "~7.2.0",
    "@angular/common": "~7.2.0",
    "@angular/compiler": "~7.2.0",
    "@angular/core": "~7.2.0",
    ...
  ,
  "devDependencies": 
    "@angular-devkit/build-angular": "~0.13.0",
    "@angular-devkit/core": "^7.3.9",
    "@angular-devkit/schematics": "^7.3.9",
    "@angular-devkit/schematics-cli": "^0.13.9",
    "@angular/cli": "~7.3.9",
    "@angular/compiler-cli": "~7.2.0",
    "@angular/language-service": "~7.2.0",
    "@schematics/angular": "^7.3.9",
    ...
  

【问题讨论】:

【参考方案1】:

我找到了一种解决方法,但它并不令人满意。如果有人有更好的解决方案,我会全力以赴。

我最终做了什么——在我设置选项/工作区等的函数中。我添加了一些代码:

options.dashName = dasherize(options.name);
options.theName = camelize(options.name);
options.Name = classify(options.name);

然后在我的模板中,我可以分别访问dashNametheNameName 的虚线、驼峰式和PascalCase。仍然不确定为什么管道不能在文件名(或模板本身)中工作,但这确实让事情现在正常工作。

【讨论】:

发生在我身上,我的问题是文件/hello-name@dashirize.ts 中的拼写错误,而不是 hello-name@dasherize.ts .现在可以了。 您应该看看 Thierry Falvo 的回答,我相信问题在于您没有将字符串类从 @angular-devkit/core(包括 dasherize 函数和其他函数)传递给模板,所以它不知道如何处理模板名称/文件中的函数调用“dasherize”。【参考方案2】:

请检查这个。也许对你有帮助。

一定要导入strings

import  strings  from '@angular-devkit/core';

然后,将strings 传递给模板引擎,如下:

const sourceParametrizedTemplates = apply(sourceTemplates, [
  template(
    ...options,
    ...strings,
  )
]);

无需将功能分配给options。 (无论如何,更改 options 变量不是一个好习惯。

这样,dasherize 函数将在名称和模板代码中可用。

希望对你有所帮助。

【讨论】:

以上是关于自定义角度示意图:管道“dasherize”未定义。在角度项目上运行时的主要内容,如果未能解决你的问题,请参考以下文章

角度示意图条件属性/提示

Chrome 自定义选项卡 - 未触发意图 (Android)

以角度形式为文件上传设置自定义验证未按预期工作

是否使用数据流管道(未内置自定义)从谷歌存储到 bigquery 摄取数据(批量)?

为啥使用自定义全局验证器在角度材料 6 的 mat-form 字段中未显示 mat-error

使用自定义 TS 装饰器的组件方法中未定义角服务