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 相关文章推荐
更正确的asp冒泡排序
May 24 Javascript
浅析javascript中函数声明和函数表达式的区别
Feb 15 Javascript
浅谈JavaScript异常处理语句
Jun 26 Javascript
浅谈Javascript中substr和substring的区别
Sep 30 Javascript
javascript生成随机数方法汇总
Nov 12 Javascript
BootStrap实现手机端轮播图左右滑动事件
Oct 13 Javascript
仿iframe效果Aajx文件上传实例
Nov 18 Javascript
最好用的Bootstrap fileinput.js文件上传组件
Dec 12 Javascript
Javascript中click与blur事件的顺序详析
Apr 25 Javascript
在vue项目中,使用axios跨域处理
Mar 07 Javascript
Vue加载组件、动态加载组件的几种方式
Aug 31 Javascript
微信小程序实现图片滚动效果示例
Dec 05 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
php遍历CSV类实例
2015/04/14 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
ExtJs整合Echarts的示例代码
2018/02/27 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
2017/04/14 Python
Python遍历numpy数组的实例
2018/04/04 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
100%羊绒:NakedCashmere
2020/08/26 全球购物
如何查找网页漏洞
2016/06/22 面试题
在校大学生的职业生涯规划书
2014/03/14 职场文书
酒店总经理岗位职责
2014/03/17 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
详解Apache SkyWalking 告警配置指南
2021/04/22 Servers
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers