AngularJS 的常用特性(二)
3、列表、表格以及其他迭代型元素
ng-repeat可能是最有用的 Angular 指令了,它可以根据集合中的项目一次创建一组元素的多份拷贝。
比如一个学生名册系统需要从服务器上获取学生信息,目前先把模型之间定义在 JavaScript 代码里面:
var students = [{name: 'Mary', id: '1'},
{name: 'Jack', id: '2'},
{name: 'Jill', id: '3'}];
function StudentListController($scope) {
$scope.students = students;
}
为了显示这个学生列表,可以编写如下代码:
<ul ng-controller="StudentListController">
<li ng-repeat="student in students">
<a href="/student/view/{{student.id}}">{{student.name}}</a>
</li>
</ul>
ng-repeat 将会生成标签内部所有 HTML 元素的一份拷贝,包括放指令的标签,显示结果如下:

根据具体情况分别链接到 /student/view/1、/student/view/2 以及 /student/view/3。
ng-repeat 指令可以通过 $index 返回当前引用的元素序号(类似<s:iterator>标签中的 index),还可以通过 $first、$middle及 $last,ng-repeat 指令返回布尔值。
4、隐藏和显示
对于菜单、上下文敏感的工具以及很多其他情况来说,显示和隐藏元素是一项核心功能。
ng-show 和 ng-hide 指令的功能是等价的,但是运行效果正好相反。
ng-show 在表达式为 true 时将会显示元素,为 false 时将会隐藏元素;而 ng-hide 则恰好相反。
工作原理:根据实际情况把元素的样式设置为 display : block 来显示元素;设置为 display : none 来隐藏元素。
5、CSS 类和样式
目前你已经可以在应用中动态地设置 CSS 类和样式了,只有使用{{ }}插值语法把它们进行数据绑定即可,甚至可以在模板中构造 CSS 类名的部分匹配方式。
.menu-disabled-true {
color: gray;
}
使用以下模板,可以将功能显示成禁用状态:
<div ng-controller="MenuController">
<ul>
<li class="menu-disabled-{{isDisabled}}" ng-click="DisabledIt()">Click</li>
...
</ul>
</div>
这样通过控制器来设置 isDisabled 属性:
function MenuController($scope) {
$scope.isDisabled = false;
$scope.disabledIt = function() {
$scope.isDisabled = true;
}
}
这样,只有 isDisabled 为 true 时,拼接出来的才是 menu-disabled-true,CSS 样式才会起作用。
当使用插值的方式绑定内联样式的时候,同样适用,例如 style = "{{some.expression}}"。
但是由于这种方式并不灵活,后期维护困难,所以 Angular 中推荐使用 ng-class 和 ng-style 指令。
这两个指令都可以接受一个表达式,表达式执行的结果可能是如下取值之一:
- 表示 CSS 类名的字符串,以空格分隔
- CSS 类名数组
- CSS 类名到布尔值的映射
我们可以如下实现显示错误和警告信息的功能:
.error {
background-color: red;
}
.warning {
background-color: yellow;
}
<div ng-controller="HeaderController">
...
<div ng-class="{error: isError, warning: isWarning}">{{messageText}}</div>
...
<button ng-click="showError()">Simulate Error</button>
<button ng-click="showWarning()">Simulate Warning</button>
</div>
function HeaderController($scope) {
$scope.isError = false;
$scope.isWarning = false;
$scope.showError = function () {
$scope.messageText = 'This is an error';
$scope.isError = true;
$scope.isWarning = false;
};
$scope.showWarning = function () {
$scope.messageText = 'Just a warning, Please carry on.';
$scope.isWarning = true;
$scope.isError = false;
}
}
你会发现这样实现的很优雅,而且容易维护,下面还可以做一个更炫的事情,例如,把表格中被选中的行进行高亮显示。
首先,在 CSS 中设置一个样式:
.selected {
background-color: lightgreen;
}
在模板中,我们把 ng-class 设置为 {selected: $index == selectedRow},当模型属性 selectedRow 的值等于 ng-repeat 中的 $index 时,selected 样式就会设置到对应的那一行。
<table ng-controller="RestaurantTableController">
<tr ng-repeat="restaurant in directory" ng-click="selectRestaurant($index)"
ng-class="{selected : $index == selectedRow}">
<td>{{restaurant.name}}</td>
<td>{{restaurant.cuisine}}</td>
</tr>
</table>
创建控制器:
1 var app = angular.module('app', []);
2
3 app.controller('RestaurantTableController', function ($scope) {
4 $scope.directory = [{name: 'The Handsome Heifer', cuisine: 'BBQ'},
5 {name: 'Green\'s Green Greens', cuisine: 'Salads'},
6 {name: 'House of Fine Fish', cuisine: 'Seafood'}];
7 });
8
9 $scope.selectRestaurant = function (row) {
10 $scope.selectedRow = row;
11 }
显示效果如图:

特别感谢:《用 AngularJS 开发下一代 Web 应用》
AngularJS 的常用特性(二)的更多相关文章
- AngularJS 的常用特性(五)
13.使用路由和 $location 切换视图 对于一些单页面应用来说,有时候需要为用户展示或者隐藏一些子页面视图,可以利用 Angular 的 $route 服务来管理这种场景. 你可以利用路由服务 ...
- AngularJS 的常用特性(一)
前言:AngularJS 是一款来自 Google 的前端 JS 框架,该框架已经被应用到了 Google 的多款产品中,这款框架最核心特性有:MVC.模块化.自动化双向数据绑定.语义化标签.依赖注入 ...
- AngularJS 的常用特性(四)
11.使用 Module(模块) 组织依赖关系 Angular 里面的模板,提供了一种方法,可以用来组织应用中一块功能区域的依赖关系:同时还提供了一种机制,可以自动解析依赖关系(又叫依赖注入),一般来 ...
- AngularJS 的常用特性(三)
6.表达式 在模板中使用表达式是为了以充分的灵活性在模板.业务逻辑和数据之间建立联系,同时又能避免让业务逻辑渗透到模板中. <div ng-controller="SomeContr ...
- C#网络程序设计(1)网络编程常识与C#常用特性
网络程序设计能够帮我们了解联网应用的底层通信原理! (1)网络编程常识: 1)什么是网络编程 只有主要实现进程(线程)相互通信和基本的网络应用原理性(协议)功能的程序,才能算是真正的网 ...
- Unity3D编辑器扩展(五)——常用特性(Attribute)以及Selection类
前面写了四篇关于编辑器的: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)——使用GUI绘制窗口 Unity3D ...
- 常用模块二(hashlib、configparser、logging)
阅读目录 常用模块二 hashlib模块 configparse模块 logging模块 常用模块二 返回顶部 hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SH ...
- 第三节:Vuejs常用特性2和图书案例
一. 常用特性2 1. 监听器 用watch来响应数据的变化, 一般用于异步或者开销较大的操作, watch 中的属性 一定是data 中 已经存在的数据!!! 当需要监听一个对象的改变时,普通的wa ...
- C++11常用特性介绍——auto类型修饰符
1.C++11常用特性介绍 从本篇开始介绍C++11常用特性,大致分:关键字及新语法.STL容器.多线程.智能指针内存管理,最后讲一下std::bind和std::function 二.关键字和新语法 ...
随机推荐
- CSS3 线性渐变linear-gradient
CSS3 Gradient 分为 linear-gradient(线性渐变)和 radial-gradient(径 向渐变).为了更好的应用 CSS3 Gradient,需要先了解一下目前的几种现代浏 ...
- c# .NET RSA结合AES加密服务端和客户端请求数据
这几天空闲时间就想研究一下加密,环境是web程序,通过js请求后台返回数据,我想做的事js在发送请求前将数据加密,服务端收到后解密,待服务端处理完请求后,将处理结果加密返回给客户端,客户端在解密,于是 ...
- 基于ASP.NET生成条形码(code128)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...
- Regular进阶: 几点性能优化的建议
本文由作者郑海波授权网易云社区发布. 本文旨在用 20% 的精力解决使用Regular过程中 80% 的性能问题. 这里大部分是关于脏检查的性能优化,不了解的可以先看下<Regular脏检查介绍 ...
- 「HEOI2014」南园满地堆轻絮
题目链接 戳我 题目出处 菩萨蛮·南园满地堆轻絮 温庭筠 南园满地堆轻絮,愁闻一霎清明雨.雨后却斜阳,杏花零落香 ...
- django系列3.1--url路由配置, 正则, 分发include, 分组命名匹配
一.url配置 在django项目中urls.py文件中就是为这个url调用的view(视图)函数之间的映射表,来配置访问的一个url执行什么代码 默认的基本格式: from django.conf. ...
- linux命令之文件备份与压缩命令
1.tar:打包备份 该命令是将多个命令打包到一起,并且可以实现解压打包.打包是将多个文件或者目录变成一个总的文件,压缩则是将一个大的文件通过压缩算法变成一个小文件. 参数 说明 z(常用) 通过gz ...
- Mybatis 类的转换器
想一个事情 ,例: 我数据库的表 定义了一个表student 里面有一个字段 stu_sex int类型 可是我对应的实体类是 String 类型或者其他类型 这个时候 实体类与数据库表肯定对应不 ...
- Windows Python Extension Packages
备注: 1.先要安装wheel库:pip install wheel 2.下载wheel,切换至下载路径,然后安装:pip install wheel库名.whl Windows Python Ext ...
- [Objective-C语言教程]复合对象(33)
在Objective-C中,可以在类集群中创建子类,该类集合定义了一个嵌入在其中的类. 这些类对象是复合对象.你可能想知道什么是类集群,下面首先了解什么是类集群. 1. 类集群 类集群是基础框架广泛使 ...