ng-alain的sf如何自定义部件的流程


Posted in Javascript onJune 12, 2020

一、背景

最近使用ng-alain做前端,sf的部件很丰富,但是做起来之后就会发现,多多少少会有一些不符合需求的东西,比如:

ng-alain的sf如何自定义部件的流程

这是一个string的部件,后边跟上一个单位看着很不错,但是我们通常在使用number时会更需要这个单位,然而官方的部件并没有
再比如:

ng-alain的sf如何自定义部件的流程

我想做一个编辑框,要求内容不可编辑,并且该内容要从别的列表进行选择,下拉选择可以满足需求,但是如果内容太多,有时就不方便使用下拉框了,那么这时候我们就需要自定义

二、自定义ng-alain部件的流程

1、组件的整体结构

ng-alain的sf如何自定义部件的流程

2、首先,组件click-input.component.html,自定义组件要包在sf-item-wrap特殊标签里面

<sf-item-wrap [id]="id" [schema]="schema" [ui]="ui" [showError]="showError" [error]="error" [showTitle]="schema.title">
 <!-- 开始自定义控件区域 -->
 <div nz-row>
  <div nz-col nzSpan="16"><input type="text" [placeholder]="placeholder" nz-input [(ngModel)]="content" [disabled]="inputDisable" (ngModelChange)="onChange()"></div>
  <div nz-col nzSpan="2" nzPush="2"></div>
  <div nz-col nzSpan="6"><button nz-button type="button" nzType="primary" (click)="test()" >{{btnTitle}}</button></div>
 </div>
 <!-- 结束自定义控件区域 -->
</sf-item-wrap>

3、写组件click-input.component,继承ControlWidget

import {Component, OnInit} from '@angular/core';
import { ControlWidget } from '@delon/form';

@Component({
 selector: 'app-product-widget-click-input',
 templateUrl: './click-input.component.html',
})
export class ClickInputComponent extends ControlWidget implements OnInit {

 /* 用于注册小部件 KEY 值 */
 static readonly KEY = 'click-input';

 // 价格区间
 content: any;
 // to: any;

 placeholder: string;  // 使用的时候用来绑定 ui: {placeholder: '请选择业务系统' } 
 inputDisable: boolean; // 使用的时候用来绑定 ui: {inputDisable: true,  // input是否可用}
 btnTitle: string; // 使用的时候用来绑定 ui: {btnTitle: '选择数据',}  按钮名称

 ngOnInit(): void {
  this.placeholder = this.ui.placeholder || '请输入'; // 使用的时候用来绑定 ui: {placeholder: '请选择业务系统' } 
  this.inputDisable = this.ui.inputDisable || false; // 使用的时候用来绑定 ui: {inputDisable: true,  // input是否可用}
  this.btnTitle = this.ui.btnTitle || '按钮'; // 使用的时候用来绑定 ui: {btnTitle: '选择数据',}
 }

 getData = () => {
  return this.content;
 }

 onChange() {
  const v = this.getData();
  this.setValue(v);
 }

 // reset 可以更好的解决表单重置过程中所需要的新数据问题
 reset(value: any) {
  if (value) {
   console.log(value);
   const content = value;
   this.content = content;
   // this.to = to;
   this.setValue(value);
  }

 }

 test(value?: string){
  if (this.ui.click) {
   this.ui.click(value);  // 可以在组件里直接调用使用ui的配置那里的方法 ui: {click: (value) => this.test(value),}
  }
 }

}

4、在shared.module.ts中注册部件

涉及到项目内容,以下只展示注册部件的住要内容

// 自定义 小部件
const WIDGETS = [
 RangeInputComponent,
 ClickInputComponent
];

@NgModule({
 declarations: [
  // your components
  ...COMPONENTS,
  ...DIRECTIVES,
  ...WIDGETS
 ],
})

export class SharedModule {
 constructor(widgetRegistry: WidgetRegistry) {
  // 注册 自定义的 widget
  for (const widget of WIDGETS){
   widgetRegistry.register(widget.KEY /* 'range-input' */, widget);
  }
 }
}

5、使用自定义部件

ng-alain的sf如何自定义部件的流程

channel-select.component.html

<sf [schema]="schema" (formSubmit)="submit($event)">
</sf>

channel-select.component.ts

schema: SFSchema = {
  properties: {
   btn: { type: 'string', title: '编辑框+按钮',
    default: '1234', // 设默认值
    ui: {
     widget: 'click-input',
     placeholder: '请选择业务系统',
     // inputDisable: true,  // input是否可用
     btnTitle: '选择数据',
     click: (value) => this.test(value),
    }
   },
  }
 };

总结

到此这篇关于ng-alain的sf如何自定义部件的文章就介绍到这了,更多相关ng-alain的sf如何自定义部件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Javascript玩转继承(三)
May 08 Javascript
js实现点击添加一个input节点
Dec 05 Javascript
jquery显示loading图片直到网页加载完成的方法
Jun 25 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
Jul 12 Javascript
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
原生js实现form表单序列化的方法
Aug 02 Javascript
js继承的这6种方式!(上)
Apr 23 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
Jul 16 Javascript
使用react context 实现vue插槽slot功能
Jul 18 Javascript
详解webpack-dev-middleware 源码解读
Mar 23 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 Javascript
Node.js API详解之 net模块实例分析
May 18 Javascript
如何在微信小程序中使用骨架屏的步骤
Jun 12 #Javascript
基于Web Audio API实现音频可视化效果
Jun 12 #Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
Jun 12 #Javascript
学前端,css与javascript重难点浅析
Jun 11 #Javascript
微信小程序 scroll-view的使用案例代码详解
Jun 11 #Javascript
基于ajax及jQuery实现局部刷新过程解析
Sep 12 #jQuery
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
Jun 11 #Javascript
You might like
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
python字符串对其居中显示的方法
2015/07/11 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
Python FFT合成波形的实例
2019/12/04 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
用python读取xlsx文件
2020/12/17 Python
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
中间件分为哪几类
2012/03/14 面试题
护理专业的自荐信
2013/10/22 职场文书
关于教师节的演讲稿
2014/09/04 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
2015年行政部工作总结
2015/04/28 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
TS 类型兼容教程示例详解
2022/09/23 Javascript