Angular 角度2-在抽象(父)组件中定义输入
我们在新的Angular 2应用程序中使用自定义组件,最近希望提取父组件中的某些部分,然后将其从子组件扩展。但是@Input()属性有一些问题 当我们在父组件中定义它们的输入时,应用程序与“ng serve”(在开发模式下)一样工作。但当我们使用“ng build--prod”构建应用程序时,编译器会抱怨这些输入(本例中的标签是我们的输入),就好像它们不是子组件声明的一部分一样。看起来是这样的:Angular 角度2-在抽象(父)组件中定义输入,angular,Angular,我们在新的Angular 2应用程序中使用自定义组件,最近希望提取父组件中的某些部分,然后将其从子组件扩展。但是@Input()属性有一些问题 当我们在父组件中定义它们的输入时,应用程序与“ng serve”(在开发模式下)一样工作。但当我们使用“ng build--prod”构建应用程序时,编译器会抱怨这些输入(本例中的标签是我们的输入),就好像它们不是子组件声明的一部分一样。看起来是这样的: <jb-input class="col-md-6" name="name
<jb-input class="col-md-6"
name="name"
[label]="'surname'"
ngModel
required>
</jb-input>
母体组分减容:
export class JbInputComponent extends JbFormBasicComponent implements OnInit {
...
@Injectable()
export default abstract class JbFormBasicComponent implements ControlValueAccessor {
@Input() label: string;
...
当我们还在子组件中定义输入时,它就起作用了。但是,有没有更好的方法来实现这一点,而不必定义我们在这两个地方的投入
- 在这里,我们的父子关系只是在组件类级别。父级不需要有自己的选择器/模板
@Component({
moduleId: module.id,
selector: '..',
templateUrl: '..',
inputs: ['label', ..]
})
export class JbInputComponent extends JbFormBasicComponent implements OnInit {
..
另一个选项是:将父级也定义为组件:
@Component({
moduleId: module.id,
template: ''
})
export class JbFormBasicComponent implements ControlValueAccessor {
..
因此,输入和输出字段对于子项是可见的,而无需在每个子项中再次定义它们。但现在这个组件也必须在app.module中声明,因为它现在也是一个组件。这样,父对象不需要@Injectable注释
但是我们仍然不知道该走哪条路。。Angular文档也像一个笑话。我对Angular cli不太了解。但这只是一个提示:当某些东西在开发中起作用而在生产中不起作用时,这是因为一些生产插件把代码弄乱了。顺便说一句,我觉得有点奇怪,你用@injectables来装饰一个抽象组件。我们也想到了那些插件(minifier等)。其他事情:没有@injectable根本不起作用。。我也不知道为什么。。这是我们在控制台中看到的错误:无法解析“ourChildComponent”的所有参数:(?)。您可以尝试使用与生产相同的插件运行开发。。。构建可能需要更长的时间,但很可能您会发现它不起作用。。。然后开始一个接一个地移除插件,直到你发现是哪个插件把事情搞砸了。关于可注入性,它是一个装饰器,仅用于将类标记为可用于DI;这对于一个组件来说没有多大意义,对于一个抽象类来说就更没有意义了。但我可能遗漏了什么。我对这件事不太清楚。但这只是一个提示:当某些东西在开发中起作用而在生产中不起作用时,这是因为一些生产插件把代码弄乱了。顺便说一句,我觉得有点奇怪,你用@injectables来装饰一个抽象组件。我们也想到了那些插件(minifier等)。其他事情:没有@injectable根本不起作用。。我也不知道为什么。。这是我们在控制台中看到的错误:无法解析“ourChildComponent”的所有参数:(?)。您可以尝试使用与生产相同的插件运行开发。。。构建可能需要更长的时间,但很可能您会发现它不起作用。。。然后开始一个接一个地移除插件,直到你发现是哪个插件把事情搞砸了。关于可注入性,它是一个装饰器,仅用于将类标记为可用于DI;这对于一个组件来说没有多大意义,对于一个抽象类来说就更没有意义了。但我可能错过了什么。