Расширение компонента пользовательского интерфейса Kendo Angular 2 и создание собственной оболочки компонентов со всеми возможностями компонентов Kendo

Я хочу создать один компонент Angular 2, который может обернуть кендо-компонент другим компонентом.

Что-то вроде ниже my-Component.component.html

 <div class="my-component-wrapper"><br />
      <label>{{label}}<br />
        <mytooltipComp></mytooltipComp><br />
      </label><br />
    <kendo-dropdownlist<br />
        [data]="data"<br />
        [defaultItem]="defaultItem"<br />
        [textField]="'text'"<br />
        [valueField]="'value'"<br />
        [valuePrimitive]="true"<br />
        (ngModelChange)="updateData($event)"<br />
        (selectionChange)="handleSelection($event)"><br />
    </kendo-dropdownlist><br />   
   <div *ngIf="_dropdownControl.valid == false || this.value==null"><br />
        <p *ngIf="errorMsgShow">{{errorMsg}}</p><br />
      </div><br />
    </div><br />      

Мой файл wrapper.ts имеет директиву компонента ниже.

@Component({
   selector: 'my-Component',        
   templateUrl: './my-Component.component.html'
})        

Теперь, чтобы использовать свойство компонента kendo, мне нужно переопределить его в моем файле wrapper.ts, например, @Input('data') data: any;

чтобы использовать мой деформированный компонент мне нужен следующий код

<my-Component
               [data]="genders"
               [label]="'mylable'"
               [isValidate]=true
               [showError]=true>
</my-Component>

Мой вопрос

Поскольку [data] уже является свойством kendo, я не хочу переопределять его в wrapper.ts.

Также обтекание существующего компонента кендо, не позволяющее мне устанавливать другие связанные с кендо свойства, такие как фильтрация и т. Д., Для этого мне нужно снова определить то же самое в компоненте wrapper.ts.

Можно ли как-нибудь использовать все возможности кендо внутри моей обертки?

1 ответ

Как только вы решите встроить компонент kendo в оболочку, вы изолируете компонент kendo от шаблона страницы, так что у вас нет другого выбора, кроме как передать свойства через оболочку.

Если ваши данные поступают извне, вам нужно определить @Input() данные в вашей обертке. Но вы также можете запросить API, чтобы заполнить ваши данные, и это можно сделать внутри оболочки.

Кроме того, проверьте CustomValueAccessor, это то, что вам нужно будет внедрить в свой пользовательский элемент управления, если вы хотите, чтобы он интегрировался с Angular Forms и управлял ngModel.

Вы также можете извлечь выгоду из наследования, создав базовый компонент раскрывающегося списка (который будет выполнять реализацию ControlValueAccessor и управляя базовой логикой), и расширив его для каждого типа раскрывающегося списка, который вам необходим.

Другие вопросы по тегам