Kendo TextArea组件内的角度8-formControlName

问题描述 投票:0回答:1

我正在尝试在Kendo文本区域内使用formControlName,并使用外部组件。

使用以下代码库链接,其仍然无法正常工作。Angular 2 - formControlName inside component

有人将如何解决这个问题?

InputText.ts

export class InputTextComponent implements  AfterViewInit, ControlValueAccessor  {
  @Input() disabled: boolean;
  @Output() saveValue = new EventEmitter();

  value: string;
  onChange: () => void;
  onTouched: () => void;

  writeValue(value: any) {
    this.value = value ? value : "";
  }

  registerOnChange(fn: any) {this.onChange = fn}

  registerOnTouched(fn: any) {this.onTouched = fn}

  setDisabledState(isDisabled) {this.disabled = isDisabled}
}

InputText.html

 <input kendoTextBox />
css angular kendo-ui telerik angular8
1个回答
0
投票

不确定这是您要的内容,但是为了在自定义组件中使用formControlName,您需要执行的操作

app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { InputTextComponent } from './input-text';

@NgModule({
  declarations: [
    AppComponent,
    InputTextComponent
  ],
  imports: [
    FormsModule,
    ReactiveFormsModule,
    BrowserModule,
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }  

app.component.html

<form [formGroup]="details">
  <input-text formControlName="name"></input-text>
  <!-- This should show the name as you change it in your custom control -->
  {{details.value | json}} 
</form>

app.component.ts

import { Component } from '@angular/core';
import { FormGroup, FormControl } from '@angular/forms';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {
  public details: FormGroup;

  constructor(
  ) {
    this.details = new FormGroup({
      name: new FormControl("name")
    });
  }
}

input-text.component.html

<input kendoTextBox [(ngModel)]="value" (ngModelChange)="onChange($event)" />

input-text.component.ts

import { Component, forwardRef } from "@angular/core";
import { NG_VALUE_ACCESSOR, ControlValueAccessor } from "@angular/forms";

@Component({
  selector: "input-text",
  templateUrl: "./input-text.html",
  styleUrls: ["./input-text.scss"],
  providers: [
    {
      provide: NG_VALUE_ACCESSOR,
      useExisting: forwardRef(() => InputTextComponent),
      multi: true
    }
  ]
})
export class InputTextComponent implements ControlValueAccessor {
    public value: string;

    propagateChange = (value: string) => {};

    writeValue(obj: any): void {
        this.value = obj;
    }

    registerOnTouched(fn: any): void {}

    registerOnChange(fn) {
      this.propagateChange = fn;
    }

    onChange(newValue){
        this.propagateChange(newValue);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.