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判断单个复选框是否被选中的代码
Sep 03 Javascript
JavaScript加强之自定义callback示例
Sep 21 Javascript
禁用Tab键JS代码兼容Firefox和IE
Apr 18 Javascript
JavaScript数组常用操作技巧汇总
Nov 17 Javascript
Jquery对select的增、删、改、查操作
Feb 06 Javascript
jQuery匹配文档链接并添加class的方法
Jun 26 Javascript
JavaScript闭包和范围实例详解
Dec 19 Javascript
jQuery EasyUI Draggable拖动组件
Mar 01 Javascript
footer定位页面底部(代码分享)
Mar 07 Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 Javascript
npm全局模块卸载及默认安装目录修改方法
May 15 Javascript
实用Javascript调试技巧分享(小结)
Jun 18 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
PHP 事件机制(2)
2011/03/23 PHP
php中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
Python 12306抢火车票脚本
2018/02/07 Python
使用TensorFlow实现SVM
2018/09/06 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
Django 实现图片上传和下载功能
2020/12/31 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
大学生毕业自我鉴定范文
2013/11/03 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
小学生元旦感言
2014/02/26 职场文书
自荐信的格式
2014/03/10 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
工作失职检讨书500字
2014/10/17 职场文书
老公保证书怎么写
2015/02/26 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
用Python写一个简易版弹球游戏
2021/04/13 Python