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也能包含文件
Oct 26 Javascript
Javascript实例教程(19) 使用HoTMetal(3)
Dec 23 Javascript
javascript模拟地球旋转效果代码实例
Dec 02 Javascript
jquery map方法使用示例
Apr 23 Javascript
从零学jquery之如何使用回调函数
May 16 Javascript
jQuery计算文本框字数及限制文本框字数的方法
Mar 01 Javascript
基于JavaScript实现 网页切出 网站title变化代码
Apr 03 Javascript
浅谈js script标签中的预解析
Dec 30 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
Aug 22 Javascript
原生JavaScript实现Ajax异步请求
Nov 19 Javascript
js中怎么判断两个字符串相等的实例
Jan 17 Javascript
基于JavaScript实现大文件上传后端代码实例
Aug 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
php中的登陆login
2007/01/18 PHP
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
js禁止页面复制功能禁用页面右键菜单示例代码
2013/08/29 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
Python连接DB2数据库
2016/08/27 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
python如何为创建大量实例节省内存
2018/03/20 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
numpy中的meshgrid函数的使用
2019/07/31 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
Python随机数函数代码实例解析
2020/02/09 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
妇产科护士自我鉴定
2013/10/15 职场文书
班级入场式解说词
2014/02/01 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
售房协议书范本
2015/08/11 职场文书