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 相关文章推荐
JS使用getComputedStyle()方法获取CSS属性值
Apr 23 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
Yarn的安装与使用详细介绍
Oct 25 Javascript
javascript动画之磁性吸附效果篇
Dec 09 Javascript
js输入框使用正则表达式校验输入内容的实例
Feb 12 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
May 31 Javascript
node结合swig渲染摸板的方法
Apr 11 Javascript
详解如何构建Promise队列实现异步函数顺序执行
Oct 23 Javascript
javascript中的event loop事件循环详解
Dec 14 Javascript
微信小程序位置授权处理方法
Jun 13 Javascript
vue实现点击按钮下载文件功能
Oct 11 Javascript
js动态添加带圆圈序号列表的实例代码
Feb 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
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
一句话JavaScript表单验证代码
2009/08/02 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
ES6的新特性概览
2016/03/10 Javascript
JavaScript的==运算详解
2016/07/20 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
Python实现全局变量的两个解决方法
2014/07/03 Python
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
python实现同时给多个变量赋值的方法
2015/04/30 Python
详细解析Python中的变量的数据类型
2015/05/13 Python
Python实现统计单词出现的个数
2015/05/28 Python
python实现旋转和水平翻转的方法
2018/10/25 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
Python3读写ini配置文件的示例
2020/11/06 Python
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
Java的基础面试题附答案
2016/01/10 面试题
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电
移除Selenium中window.navigator.webdriver值
2022/06/10 Python