Angular 2或4:如何添加子组件的多个实例

里科

注意:我已经看到了几个问题,例如我的标题,但是它们不能解决我的问题。喜欢:

情况
我的应用程序中有多个模板驱动的表单,其中包含多个日期字段。我制作了一个特殊组件(DatePickerComponent),以这些形式将其作为子组件插入。

问题
组件内部的变量是共享的。Angular可能实例化相同的对象,但是我想要不同的实例!我注意到肯定如何做到这一点。

我认为是解决方案,
这可能与声明DatepickerComponent的位置有关。我在app.module.ts中声明了它,但这为整个应用程序创建了一个实例。我不知道如何确保我的父组件被迫使用两个不同的子组件。

推理原因是
我在单独的组件中执行此操作,因为我还没有日期选择器。现在,它是一个带有模式表单验证的文本框。稍后,我会做得更好(一个真正的日期选择器),并且我不想到处复制粘贴代码并犯错。使用1个组件,即可轻松完成。

具体代码

import {Component, EventEmitter, Input, OnInit, Output} from "@angular/core";
import {ControlContainer, NgForm} from "@angular/forms";

@Component({
  selector: 'app-datepicker-component',
  templateUrl: './datepicker.component.html',
  // Add viewProviders, so the input will be treated part of the form in the parent.
  // https://stackoverflow.com/questions/39242219/angular2-nested-template-driven-form
  viewProviders: [ { provide: ControlContainer, useExisting: NgForm } ]
})
export class DatepickerComponent implements OnInit { // stuff }

HTML档案:

<div class="form-group">
  <label for="date" class="col-sm-4 control-label">{{ label }}</label>
  <div class="col-sm-8">
    <input type="text" name="date" id="date" class="form-control" [ngModel]="date" (ngModelChange)="dateChange.emit($event)"
           #inputdate="ngModel" [required]="required" pattern="^(?:(?:31(\/|-|\.)(?:0[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)02\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)\d{2})$"/>
    <span class="help-block" *ngIf="required && inputdate.invalid && inputdate.errors.required && (inputdate.dirty || inputdate.touched || triedSubmit)">Datum is verplicht.</span>
    <span class="help-block" *ngIf="inputdate.invalid && inputdate.errors.pattern && (inputdate.dirty || inputdate.touched || triedSubmit)" >Datum moet formaat dd-MM-yyyy hebben.</span>
  </div>
</div>

在其他页面中,我使用:

<form>
  <app-datepicker-component label="Actief vanaf" [(date)]="date1" [required]="true" [triedSubmit]="triedSubmit"></app-datepicker-component>

  <app-datepicker-component label="Actief tot" [(date)]="date2" [required]="false" [triedSubmit]="triedSubmit"></app-datepicker-component>
</form>

AppModule:

@NgModule({
  declarations: [
    AppComponent,
    // stuff
    DatepickerComponent
  ],
  imports: [
    // stuff
  ],
  providers: [
    // stuff],
  bootstrap: [AppComponent]
})
export class AppModule { }

出错
的地方由于使用了相同的实例,所以共享了date变量,我不希望这样做。同样,如果验证触发了其中一个组件,它将认为其他组件无效(不是)。

用户名

实际上,它没有使用相同的实例。问题是它们都属于同一对象form,并且对都使用相同的值name这会使基础的角形对象将它们视为相同。

您可以选择将它们放在不同的表单中,或者使用不同的name值(可能通过将名称作为输入传递)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Angular 2中为多个子组件提供单独的服务实例

遍历相同组件angular2的多个@ViewChild实例

如何从父组件 OnSubmit Angular 4 触发子组件的验证?

Angular2:如何让父组件告诉子组件的尺寸?

Angular 2-子组件如何与父组件说话?

如何从angular2中的子组件更新父组件

Angular 5添加组件的新实例

Angular2允许组件及其子组件访问服务中的ngModel的单个实例

Angular2-删除所有/最近的子组件后无法添加子组件

Angular2-尝试将组件从父组件添加到子组件

Angular 2/4:无法更新子组件视图

模拟子组件-Angular 2

Angular 2中的子组件

如何通过单击按钮 angular 4 加载子组件

Angular:如何重置子组件

angular2测试,如何模拟子组件

Angular2-如何执行仅包含子组件的执法?

如何在Angular 2中获得子组件的contentchildren?

Angular 2:如何将子组件绑定到属性

Angular 2/4如何向HTTP帖子添加多个标题

如何在多个组件之间使用Angular 2的FormBuilder

在Angular 5中,如何从父组件访问动态添加的子组件?

如何使用Angular Reactive表单在父组件中添加子组件?

如何解析Angular 2中动态添加的组件的值?

如何在 Angular 2 组件上添加简单的 onchange 事件

如何使用参数实例化Angular组件?

Angular 2如何将组件子组件中的方法发射到组件父类

服务实例不可用于angular2中的子组件

如何在Angular 6中使用同一组件的多个实例?