Angular Dynami c Форма с Dynami c Связывание событий с Dynami c Функция - PullRequest
0 голосов
/ 29 мая 2020

Привет, я новичок в angular, и мне нужно сделать что-то, что отображает форму, используя JSON, и что JSON также имеет все события и функции. Это мой Html компонент

    <div *ngFor="let form of forms; index as i ">
    <div *ngIf="form.type == 'input'">
        <input  type="text" value="{{ form.value }}" ("{{form.event}}") = "{{form.function}}"/>

    </div>
</div>

Это мой файл TS,

    @Component({
      selector: 'app-form',
      templateUrl: './form.component.html',
      styleUrls: ['./form.component.scss']
    })
    export class FormComponent implements OnInit {

      forms: any
      constructor() { }

  ngOnInit(): void {
      this.forms = [
        {
          'type' : 'input',
          'value' : '123',
          'event' : 'click',
          'function' : 'show',
        },

      ]

  }
   show(a,b){
    console.log('hello');
  }

}

Я не могу найти способ сгенерировать HTML с событиями и функциями из моего JSON Массив.

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Я нашел решение.

Рабочий стек: - https://stackblitz.com/edit/angular-kecqvt

В качестве примера я взял манекен JSON.

[{
   "type":"input",
   "value":"3",
   "event":"change",
   "function":"/Function(function (value) { console.log(value); })/"
}]

Я преобразовал json в js объект, например: -

public forms = JSON.parse(this.formJSON, function(key, value) {
  if (typeof value === "string" &&
      value.startsWith("/Function(") &&
      value.endsWith(")/")) {
    value = value.substring(10, value.length - 2);
    return (0, eval)("(" + value + ")");
  }
  return value;
});

My HTML: -

<div *ngFor="let form of forms; index as i ">
    <div *ngIf="form.type == 'input'">
        <input  type="text" [value]="form.value" (change) = "form['event'] === 'change' && form['function']($event.target.value)" 
        (blur) = "form['event'] === 'blur' && form['function']($event.target.value)"/>
    </div>
</div>
1 голос
/ 29 мая 2020

это невозможно. Angular transpile и minif ie код, поэтому вы не знаете названия функций

Дело в том, что ваша форма была

this.forms = [
        {
          'type' : 'input',
          'value' : '123',
          'event' : 'click',
          'function' : this.show,
        },

Смотрите эту "функцию" это функция "this.show"

И ваши входные данные могут быть такими:

<div *ngIf="form.type == 'input'">
        <input  type="text" [ngValue]="form.value" 
          (click)="form.event=='click' && form.function($event)"
          (blur)="form.event=='blur' && form.function($event)"
          (focus)="form.event=='focus' && form.function($event)"
        />
</div>

См., что, когда вы используете (event) = "condition && function ()", если условие false не выполнять функцию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...