//============== 下拉列表包装器=================== //Copyright 2018 何镇汐 //Licensed under the MIT license //================================================ import { Component, Input, OnInit, Host, Optional } from '@angular/core'; import { NgForm } from '@angular/forms'; import { FormControlWrapperBase } from './base/form-control-wrapper-base'; import { Select, SelectItem, SelectOption, SelectOptionGroup } from '../core/select'; import { WebApi as webapi } from '../common/webapi'; import { MessageConfig } from '../config/message-config'; /** * Mat下拉列表包装器 */ @Component({ selector: 'mat-select-wrapper', template: ` {{getTemplate(control.triggerValue)}} {{resetOptionText }} {{ item.text }} {{ item.text }} {{startHint}} {{endHint}} {{prefixText}}  {{suffixMaterialIcon}} {{suffixText}} {{requiredMessage}} ` }) export class SelectWrapperComponent extends FormControlWrapperBase implements OnInit { /** * 按组显示 */ isGroup: boolean; /** * 列表项集合 */ options: SelectOption[]; /** * 列表组集合 */ optionGroups: SelectOptionGroup[]; /** * 数据源 */ private data: SelectItem[]; /** * 数据源 */ @Input() get dataSource(): SelectItem[] { return this.data; } set dataSource(value: SelectItem[]) { this.data = value; this.loadData(); } /** * 请求地址 */ @Input() url: string; /** * 多选 */ @Input() multiple: boolean; /** * 启用重置项 */ @Input() enableResetOption: boolean; /** * 重置项文本 */ @Input() resetOptionText: string; /** * 显示模板,值用{0}表示,范例:当前选中:{0} ,显示为 当前选中:1,2,3 */ @Input() template: string; /** * 初始化Mat下拉列表包装器 */ constructor(@Optional() @Host() form: NgForm) { super(form); this.enableResetOption = true; this.resetOptionText = MessageConfig.resetOptionText; } /** * 组件初始化 */ ngOnInit() { this.loadData(); if (this.dataSource) return; this.loadUrl(); } /** * 加载数据 * @param data 列表项集合 */ loadData(data?: SelectItem[]) { data = data || this.dataSource; if (!data) return; let select = new Select(data); if (select.isGroup()) { this.isGroup = true; this.optionGroups = select.toGroups(); return; } this.isGroup = false; this.options = select.toOptions(); } /** * 从服务器加载 * @param url 请求地址 */ loadUrl(url?: string) { url = url || this.url; if (!url) { console.log("请设置下拉列表Url"); return; } webapi.get(url).handle({ handler: result => { this.loadData(result); } }); } /** * 获取模板 */ private getTemplate(value) { return this.template.replace(/\{0\}/g, value); } }