Angular 表单控件示例代码


Posted in Javascript onJune 26, 2017

本文将介绍 Angular Template-driven 表单中,常用控件的使用。涉及的表单控件如下:

  1. text
  2. number
  3. radio
  4. select (基本类型)
  5. select (对象)
  6. multi select
  7. cascading select (级联操作)
  8. checkbox (boolean)
  9. multi checkbox

表单的局部效果

Angular 表单控件示例代码

数据接口

export interface User {
 name: string; // 名字
 age?: number; // 年龄
 gender?: string; // 性别
 role?: string; // 角色
 theme?: Theme; // 主题
 isActive?: boolean; // 是否激活
 hobbies?: {[key: string]: boolean}; // 爱好
 topics?: string[]; // 话题
 province: number; // 省
 city: number; // 市
}

export interface Theme {
 display: string; // 显示文本
 backgroundColor: string; // 背景颜色
 fontColor: string; // 字体颜色
}

控件使用示例

Text

<div class="form-group">
  <label>名字</label>
  <input type="text" class="form-control" name="name" [(ngModel)]="user.name">
</div>

Number

<div class="form-group">
  <label>年龄</label>
  <input type="number" class="form-control" name="age" [(ngModel)]="user.age">
</div>

Radio

数据

genders = [{ value: 'F', display: '女' },{ value: 'M', display: '男' }];

模板

<div class="form-group">
  <label>性别</label>
   <label *ngFor="let gender of genders;">
   <input type="radio" name="gender" [(ngModel)]="user.gender" 
     [value]="gender.value">
      {{gender.display}}
 </label>
</div>

Select - 基本类型

数据

roles = [{ value: 'admin', display: '管理员' },{ value: 'user', display: '普通用户' }];

模板

<div class="form-group">
 <label>角色</label>
 <select name="role" class="form-control" [(ngModel)]="user.role">
   <option *ngFor="let role of roles" [value]="role.value">
    {{role.display}}
  </option>
 </select>
</div>

Select - 对象

数据

themes: Theme[] = [
 { backgroundColor: 'black', fontColor: 'white', display: '黑色' },
 { backgroundColor: 'white', fontColor: 'black', display: '白色' },
 { backgroundColor: 'grey', fontColor: 'white', display: '灰色' }
];

模板

<div class="form-group">
 <label>主题</label>
 <select name="theme" class="form-control" [(ngModel)]="user.theme">
   <option *ngFor="let theme of themes" [ngValue]="theme">
     {{theme.display}}
   </option>
  </select>
</div>

Mulit Select

数据

topics = [
 { value: 'game', display: '游戏' },
 { value: 'tech', display: '科技' },
 { value: 'life', display: '生活' }
];

模板

<div class="form-group">
  <label>话题</label>
  <select multiple name="topics" class="form-control" [(ngModel)]="user.topics">
   <option *ngFor="let topic of topics" [value]="topic.value">
     {{topic.display}}
   </option>
  </select>
</div>

Cascading Select - 级联操作

数据

provinces = [
  {pk:1,pv:'北京'},
  {pk:16,pv:'福建'}
 ];

citieData = [
  {pk:1,ck:72,cv:'朝阳区'},{pk:1,ck:2800,cv:'海淀区'},
  {pk:1,ck:2801,cv:'西城区'},{pk: 16,ck: 1303,cv: '福州市'}, 
  {pk: 16,ck: 1315,cv: '厦门市'},{pk: 16,ck: 1332,cv: '泉州市'}
];

cities = this.citieData.filter(city => city.pk === 16); // 默认福建省

模板

<div class="form-group">
  <label>地址</label>
  <select name="province" class="form-control" [(ngModel)]="user.province" 
   (change)="changeProvince($event.target.value)">
     <option *ngFor="let province of provinces" [value]="province.pk">
       {{province.pv}}
     </option>
  </select>
  <select name="city" class="form-control" [(ngModel)]="user.city">
    <option *ngFor="let city of cities" [value]="city.ck">
     {{city.cv}}
    </option>
  </select>
</div>

Checkbox

模板

<div class="form-group">
  <div class="checkbox">
   <label>
    <input type="checkbox" name="isActive" [(ngModel)]="user.isActive">
      是否激活
   </label>
  </div>
</div>

Multi Checkbox

数据

hobbies = [
 { value: 'reading', display: '看书' },
 { value: 'music', display: '听歌' },
 { value: 'movie', display: '电影' }
];

模板

<div class="form-group">
  <label>爱好</label>
  <span *ngFor="let hobby of hobbies">
    <input type="checkbox" name="bobby" [value]="hobby.value" 
     [checked]="user.hobbies[hobby.value]"
     (change)="changeHobby(hobby, $event)" />
       {{hobby.display}}
  </span>
</div>

完整示例

模板

<h4>{{title}}</h4>
<form #f="ngForm" novalidate>
   <div class="form-group">
    <label>名字</label>
    <input type="text" class="form-control" name="name" [(ngModel)]="user.name">
   </div>
   <div class="form-group">
    <label>年龄</label>
    <input type="number" class="form-control" name="age" [(ngModel)]="user.age">
   </div>
   <div class="form-group">
    <label>性别</label>
    <label *ngFor="let gender of genders;">
     <input type="radio" name="gender" [(ngModel)]="user.gender" 
      [value]="gender.value">
      {{gender.display}}
    </label>
   </div>
   <div class="form-group">
    <label>角色</label>
    <select name="role" class="form-control" [(ngModel)]="user.role">
     <option *ngFor="let role of roles" [value]="role.value">
      {{role.display}}</option>
    </select>
   </div>
   <div class="form-group">
    <label>主题</label>
    <select name="theme" class="form-control" [(ngModel)]="user.theme">
     <option *ngFor="let theme of themes" [ngValue]="theme">
      {{theme.display}}
     </option>
    </select>
   </div>
   <div class="form-group">
    <div class="checkbox">
     <label>
      <input type="checkbox" name="isActive" [(ngModel)]="user.isActive">
      是否激活
     </label>
    </div>
   </div>
   <div class="form-group">
    <label>话题</label>
    <select multiple name="topics" class="form-control" [(ngModel)]="user.topics">
     <option *ngFor="let topic of topics" [value]="topic.value">
      {{topic.display}}
     </option>
    </select>
   </div>
   <div class="form-group">
    <label>爱好</label>
    <span *ngFor="let hobby of hobbies">
      <input type="checkbox" name="bobby" [value]="hobby.value" 
          [checked]="user.hobbies[hobby.value]"
       (change)="changeHobby(hobby, $event)" />
      {{hobby.display}}
    </span>
   </div>
   <div class="form-group">
    <label>地址</label>
    <select name="province" class="form-control" [(ngModel)]="user.province" 
     (change)="changeProvince($event.target.value)">
     <option *ngFor="let province of provinces" [value]="province.pk">
      {{province.pv}}
     </option>
    </select>
    <select name="city" class="form-control" [(ngModel)]="user.city">
     <option *ngFor="let city of cities" [value]="city.ck">{{city.cv}}</option>
    </select>
   </div>
   <button type="submit" (click)="save()" class="btn btn-default">保存</button>
</form>

组件类

export class AppComponent implements OnInit {
 title = '新增用户';
 user: User;

 genders = [{ value: 'F', display: '女' },{ value: 'M', display: '男' }];

 roles = [{ value: 'admin', display: '管理员' },{ value: 'user', display: '普通用户' }];

 themes: Theme[] = [
  { backgroundColor: 'black', fontColor: 'white', display: '黑色' },
  { backgroundColor: 'white', fontColor: 'black', display: '白色' },
  { backgroundColor: 'grey', fontColor: 'white', display: '灰色' }
 ];

 topics = [
  { value: 'game', display: '游戏' },
  { value: 'tech', display: '科技' },
  { value: 'life', display: '生活' }
 ];

 hobbies = [
  { value: 'reading', display: '看书' },
  { value: 'music', display: '听歌' },
  { value: 'movie', display: '电影' }
 ];

 provinces = [
  {pk:1,pv:'北京'},
  {pk:16,pv:'福建'}
 ];

 citieData = [
  {pk:1,ck:72,cv:'朝阳区'},{pk:1,ck:2800,cv:'海淀区'},
  {pk:1,ck:2801,cv:'西城区'},{pk: 16,ck: 1303,cv: '福州市'}, 
  {pk: 16,ck: 1315,cv: '厦门市'},{pk: 16,ck: 1332,cv: '泉州市'}
 ];

 cities = this.citieData.filter(city => city.pk === 16);

 changeHobby(hobby, event) {
  this.user.hobbies[hobby.value] = event.target.checked;
 }

 changeProvince(pk) {
  this.cities = this.citieData.filter((city)=> city.pk == pk);
  this.user.city = this.cities[0].ck;
 }

 ngOnInit(): void {
  this.user = {
   name: '',
   gender: this.genders[0].value,
   role: this.roles[1].value,
   theme: this.themes[0],
   isActive: false,
   hobbies: {'music': true},
   topics: [this.topics[1].value],
   province: 16, // 福建省
   city: 1315 // 厦门市
  }
 }

  save() {
  console.log(this.user);
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery this 和 $(this) 的区别
Aug 23 Javascript
js复制到剪切板的实例方法
Jun 28 Javascript
jQuery zTree加载树形菜单功能
Feb 25 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Dec 15 Javascript
利用Js+Css实现折纸动态导航效果实例源码
Jan 25 Javascript
javascript防篡改对象实例详解
Apr 10 Javascript
mui上拉加载更多下拉刷新数据的封装过程
Nov 03 Javascript
JavaScript实现封闭区域布尔运算的示例代码
Jun 25 Javascript
微信小程序列表中item左滑删除功能
Nov 07 Javascript
vue中实现高德定位功能
Dec 03 Javascript
国内常用的js类库大全(CDN公共库)
Jun 24 Javascript
JavaScript前端面试扁平数据转tree与tree数据扁平化
Jun 14 Javascript
jQuery实现一个简单的验证码功能
Jun 26 #jQuery
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
Jun 26 #jQuery
JavaScript实现三级联动菜单实例代码
Jun 26 #Javascript
jQuery实现frame之间互通的方法
Jun 26 #jQuery
详解基于Bootstrap+angular的一个豆瓣电影app
Jun 26 #Javascript
jQuery回调方法使用示例
Jun 26 #jQuery
Iscrool下拉刷新功能实现方法(推荐)
Jun 26 #Javascript
You might like
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
js性能优化技巧
2015/11/29 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
浅谈Python中的私有变量
2018/02/28 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
2014年初一班主任工作总结
2014/11/08 职场文书
庆六一开幕词
2015/01/29 职场文书
师德师风培训感言
2015/08/03 职场文书
七年级作文之环保作文
2019/10/17 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis