Внедрение значений в динамический компонент в Angular - PullRequest
0 голосов
/ 08 октября 2018

Я работаю над компонентом, который позволяет пользователю динамически вводить правила, эти правила могут быть разных типов и в зависимости от типа правила будут записываться разные значения.

У меня есть динамические компонентыПри создании моя проблема заключается в передаче начальных значений динамически созданному компоненту.

Значения полностью отличаются от правила к правилу, поэтому я пытаюсь использовать useValue в инжекторе, но он не может разрешитьпараметры, если я добавлю параметр, чтобы принимать значения в конструкторе.

Мой инжектор для компонентов:

getInjector(rule) {
  let inject = this.injectors[rule.name];
  if (!inject) {
    inject = Injector.create([{ provide: 'initialValues', useValue: rule.values }], this.inj);
    this.injectors[rule.name] = inject;
  }

  return inject;
}

Я бы хотел что-то вроде:

export class MandatoryRuleComponent implements OnInit {
  values: any={};
  constructor(initialValues:any) { this.values = initialValues }

  ngOnInit() {
  if(!this.values.threshold){
    this.values.threshold = 9;
  }
 }
}

Полный код можно найти на Stackblitz

1 Ответ

0 голосов
/ 11 октября 2018

Вам нужно получить переданное значение в ваших динамических компонентах.См. официальный пример .

Итак, в вашем случае сделайте что-то вроде:

import { Component, OnInit, Injector } from '@angular/core';

@Component({
  selector: 'app-deprecated-rule',
  templateUrl: './deprecated-rule.component.html',
  styleUrls: ['./deprecated-rule.component.css']
})
export class DeprecatedRuleComponent implements OnInit {

  values: any = {};

  constructor(private injector: Injector) { }

  ngOnInit() {
    // get provided data
    this.values = this.injector.get('initialValues');

    if (!this.values.adjustment) {
      this.values.adjustment = 999;
    }
  }
}

, также обратите внимание, что

  • строка token устарела с версии v4, и вместо нее следует использовать Type<T> или InjectionToken<T> экземпляр
  • create(providers: StaticProvider[], parent?: Injector) (аргументы функции) устарел с версии v5, и вам следует использовать новую подпись Injector.create(options):

    create(options: {providers: StaticProvider[], parent?: Injector, name?: string})
    

Обновлено STACKBLITZ

...