我想创建一个可以接受动作名称集合的自定义角度示意图。然后,我将为用户提供的每个动作名称生成3个ngrx动作。
例如,我想创建一个可以像这样调用的原理图:
ng g my-collection:my-schematic --actions=GetById,GetByFirstName
然后,我将为GetById,GetByIdSuccess,GetByIdError,GetByFirstName,GetByFirstNameSuccess,GetByFirstNameError生成代码。
问题是我只看到了将单个值作为输入参数的角度示意图。有谁知道如何在自定义角度示意图中处理集合?
答案 0 :(得分:0)
您可以关注此博客,它将教您如何创建自己的原理图项目:
https://blog.angular.io/schematics-an-introduction-dc1dfbc2a2b2
在文件collection.json
中生成原理图项目后,可以扩展@ngrx/schematics
:
{
...
"extends": ["@ngrx/schematics"],
}
,然后使用ngrx原理图生成以下3个动作:
externalSchematic('@ngrx/schematics', 'action')
答案 1 :(得分:0)
我还没有找到如何将字符串数组转换为逻辑示意图参数的好例子,但是我找到了一种解决方法。我所做的是有一个简单的字符串输入参数,该参数始终被定界(我使用来定界值)。这是我的架构:
export interface Schema {
name: string;
path?: string;
project?: string;
spec?: boolean;
actions: string;
__actions: string[];
store?: string;
}
我解析提供的action参数,并生成字符串数组__actions并在模板中使用该属性。这是我的index.ts中的摘录:
export default function(options: ActionOptions): Rule {
return (host: Tree, context: SchematicContext) => {
options.path = getProjectPath(host, options);
const parsedPath = parseName(options.path, options.name);
options.name = parsedPath.name;
options.path = parsedPath.path;
options.__actions = options.actions.split(',');
options.__actions = options.__actions.map(_a => classify(_a));
如果您知道处理这些问题的更好方法,请分享。谢谢!
答案 2 :(得分:0)
您需要多次通过actions
。
ng g my-collection:my-schematic --actions=GetById --actions=GetByFirstName
将参数定义为schema.json
文件中的数组。
...
"actions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The name of the actions."
},
...
也在您的schema.ts
中。
export interface Schema {
actions: string[]
}
答案 3 :(得分:0)
如果您想直接从命令参数中提取它们,您可以执行以下操作:
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "Sample",
"title": "Sample Schematic",
"type": "object",
"description": "Does stuff.",
"additionalProperties": false,
"properties": {
"things": {
"type": "array",
"items": {
"type": "string"
},
"$default": {
"$source": "argv"
},
"description": "Things from the command-line args."
}
}
}
然后,当您运行原理图时,您可以:
schematics schematic-lib:sample stuff other-stuff more-stuff
在这种情况下,things
属性将为 ['stuff', 'other-stuff', 'more-stuff']
。
编辑:请注意,如果您不提供任何参数,架构中的 required
值不会导致原理图失败。您需要在原理图中对该属性进行验证。