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 处理 URL 的两个函数代码
Aug 13 Javascript
js 全兼容可高亮二级缓冲折叠菜单
Jun 04 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
Sep 16 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
Jan 23 Javascript
jQuery动画animate方法使用介绍
May 06 Javascript
jQuery实现密保互斥问题解决方案
Aug 16 Javascript
JS判断变量是否为空判断是否null
Jul 25 Javascript
jquery小火箭返回顶部代码分享
Aug 19 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
Sep 01 Javascript
原生js实现秒表计时器功能
Feb 16 Javascript
vue实现页面滚动到底部刷新
Aug 16 Javascript
Vue OpenLayer 为地图绘制风场效果
Apr 24 Vue.js
如何在微信小程序中使用骨架屏的步骤
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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
文件上传的实现
2006/10/09 PHP
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
原生JS实现留言板
2020/03/26 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
自荐信格式简述
2014/01/25 职场文书
个人授权委托书
2014/04/03 职场文书
教师师德考核自我评价
2014/09/13 职场文书
董事长年会致辞
2015/07/29 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python
python 解决微分方程的操作(数值解法)
2021/05/26 Python
golang使用map实现去除重复数组
2022/04/14 Golang
JavaScript设计模式之原型模式详情
2022/06/21 Javascript