我想创建一个Angular 2组件,它可以用一些其他组件包装kendo-component。
类似于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(&#39;数据&#39;)数据:any;
使用我的扭曲组件我需要以下代码
<my-Component
[data]="genders"
[label]="'mylable'"
[isValidate]=true
[showError]=true>
</my-Component>
我的问题是
由于[data]已经是kendo的属性,我不想在wrapper.ts中重新定义。
同样包装现有的kendo组件,不允许我设置其他与kendo相关的属性,如过滤等,我需要在wrapper.ts组件中再次定义相同的属性。
有什么方法可以在我的包装器中使用完全的kendo功能吗?
答案 0 :(得分:1)
一旦决定在包装器中嵌入一个kendo组件,就可以将kendo组件与页面模板隔离开来,因此除了通过包装器传输属性之外别无选择。
如果您的数据来自包装器外部,则需要在包装器中定义@Input()
数据。
但您也可以查询API来填充数据,这可以在包装器内完成。
另外,请查看CustomValueAccessor,如果您希望它与Angular Forms集成并管理ngModel,则需要在自定义控件中实现它。
您还可以通过创建基本下拉组件(将执行ControlValueAccessor实现并管理基本逻辑)以及为您需要的每种类型的下拉菜单扩展它来继承。