一.  列表表格以及其它迭代型元素

ng-repeat 可能是最有用的angular指令了,它可以根据集合中的项目一次创建一组元素的多份拷贝。不管在什么地方,只要你想创建一组事物的列表,你就可以使用这条指令。

比方说:我们正在为老师们编写一套学生花名册系统,我们当然需要从服务器上获取学生信息,但是对于当前这个列子来说,我们还是把模型直接定义在javascript代码里面:

var students =[

{name: 'Mary Contrary',id:'1'},

{name: 'Jack Contrary',id:'2'},

{name: 'Jill Contrary',id:'3'}

]

function student($scope) {

$scope.students = students;

}

为了显示这个学生列表,我们可以编写下面的代码:

<ul ng-controller="student">
<li ng-repeat="student in students">
<a href="/student/view/{{student.id}}">{{student.name}}</a>
</li>
</ul>

ng-repeat 将会生产标签内部所有HTMl元素的一份拷贝,包括放指令的标签。经过这样的操作之后,我们将会看到输出为(列表的形式输出):

Mary Contrary     Jack Contrary     Jill Contrary

根据具体的情况分别链接到/student/view/1    /student/view/2     /student/view/3

正如我们所看到的,修改学生信息数组将会自动刷新所渲染的列表,如果我们需要向列表中插入一条新的学生信息,可以这样写:

$scope.insert=function(){

$scope.students.splice(1,0,{name:'tom',id:'4'});

}

然后在加一个按钮在模板中调用新增的函数

<button ng-click="insert()"></button>

我们现在将会看到   Mary Contrary     Jack Contrary     Jill Contrary      tom

ng-repeat 指令可以通过$index返回当前引用的元素序号;还可以通过$first  $middle $last,ng-repeat指令返回布尔值,告诉你当前元素是否是集合中的第一个  中间的某个元素  或者最后一个元素。

你可能需要使用$index在表格张显示出行号,那么你只要编写这么一句话即可     <td>{{$index+1}}</td>

二:隐藏和显示

对于菜单 上下文敏感的工具以及很多其他情况来说,显示和隐藏元素是一项核心的功能。与angular中其他功能一样,我们通过修改数据模型的方式来驱动UI刷新,然后通过指令变更反应到UI上。

下面的这个列子将会使用ng-show和ng-hide。这2条指令的功能是等价的,但是运行效果正好相反,它们都可以根据你所传递的表达式显示或者隐藏元素。也就是说,ng-show在表达式为true时将会显示元素,为false时将会隐藏元素。而ng-hide则恰好相反,哪一条指令更能表达你的意图,你就使用哪一条。

这2条指令的工作原理是:根据实际情况把元素的样式设置为display:block;来显示元素,设置为display:noen;来隐藏元素,设置元素为display:none来隐藏元素。接下来让我们看一个小列子。

<div ng-controller="menu" ng-app = 'myApp'>
<button ng-click="toggle()">Toggle menu</button>
<ul ng-show="show">
<li ng-click="stun()">stun</li>
<li ng-click="disin()">disin</li>
<li ng-click="erase()">erase</li>
</ul>
</div
<script type="text/javascript">
angular.module('myApp',[]).controller('menu',function($scope){
$scope.show = false;
$scope.toggle = function () {
$scope.show = !$scope.show;
}
})
</script>

三. Css类和样式

你可以在你的应用中动态的设置css类和样式了,只要使用{{}}插值语法把它们进行数据绑定即可。你甚至还可以在模板中构造css类名的部分匹配方式。

.menu-disabled-true {color:gray;}
<p class="menu-disabled-{{isDisabled}}" ng-click="stun()"></p>
$scope.stun = function(){
$scope.isDisabled = 'true';
}

通过点击可以切换文字的颜色。

src和href的属性

当在<img>或者<a>标签上进行数据绑定的时候,在src或者href属性上简单使用{{}}无法很好地运行,由于浏览器会优先使用并行的方式来加载图片和其他内容,所以angular没有机会拦截到数据绑定请求。

我们可以这样使用<img>标签以及<a>标签

<img ng-src=’/image/cats/{{favoriteCat}}’>    <a ng-href=”/shop/cate={{number}}”></a>

表达式

在模板中使用表达式是为了以充分的灵活性在模板,业务逻辑和数据之间建立联系,同时又能避免让业务逻辑渗透到模板中。我们可以进行简单的数学运算(+,-,/,*,%),进行比较运算(==,!=,>,<,>=,<=),执行布尔逻辑(&&,||,!),以及位运算(\^,&,|),你还可以调用控制器中$scope对象上所暴露的函数,引用数组和对象符号([],{},.).

一下这些都是合法的表达式列子:

<div ng-controller="some">
     <div>{{number() /
10}}</div>
     <ul ng-repeat="thing in things">
          <li ng-class='{highlight : $index % 4 >= threshold($index)}'>
               {{otherfunction($index)}}
          </li>
     </ul>
</div>

Angular随笔第二课的更多相关文章

  1. Angular随笔第一课

    一.调用angular 加载angular.js库(可以从google的cdn中加载类库,https://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/a ...

  2. CI(CodeIgniter)框架入门教程——第二课 初始MVC

    本文转载自:http://www.softeng.cn/?p=53 今天的主要内容是,使用CodeIgniter框架完整的MVC内容来做一个简单的计算器,通过这个计算器,让大家能够体会到我在第一节课中 ...

  3. OpenCV 第二课 认识图像的存储结构

    OpenCV 第二课 认识图像的存储结构 Mat Mat 类包含两部分,矩阵头和矩阵体.矩阵头包含矩阵的大小,存储方式和矩阵体存储空间的指针.因此,Mat中矩阵头的大小是固定的,矩阵体大小是不定的. ...

  4. Kali Linux Web 渗透测试视频教程— 第二课 google hack 实战

    Kali Linux Web 渗透测试— 第二课 代理简介 文/玄魂 课程地址: http://edu.51cto.com/course/course_id-1887.html 目录 shellKal ...

  5. 【第二课】深入理解Handler

    简要讲解Handler是做什么的 我们知道,在Android中,app启动会启动一个进程一个线程——UI线程,UI线程是主线程,并且不允许这个线程阻塞超过5秒,一旦超过5秒就会ANR. 所以较为耗时的 ...

  6. ruby代码重构第二课

    (文章都是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com) 在第一课里提取出了相通的代码,第二课里就把常量提取出来吧 一般把常量的定义写的对应的app/mo ...

  7. NeHe OpenGL教程 第二课:多边形

    前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢 ...

  8. Spark 3000门徒第二课scala面向对象总结

    昨晚听了王家林老师3000门徒spark系列课程的第二课,讲述了scala面向对象知识,并且带着过了一遍Spark核心类:SparkContent,RDD的代码,下面写一下心得: RDD是抽象类,实现 ...

  9. grails2.3.11第二课

    第二课主要介绍grails相关插件的使用,这是敏捷开发所必需的途径. 可以把grails的插件看作是grails正常项目的迷你型,因为看插件的源码,它的目录结构和正常项目相差无几. 官方开源插件地址 ...

随机推荐

  1. 使用spring利用HandlerExceptionResolver实现全局异常捕获

    最近一直没有时间更新是因为一直在更新自己使用的框架. 之后会慢慢带来对之前使用的spring+mvc+mybatis的优化. 会使用一些新的特性,实现一些新的功能. 我会尽量分离业务,封装好再拿出来. ...

  2. 浩哥解析MyBatis源码(十一)——Parsing解析模块之通用标记解析器(GenericTokenParser)与标记处理器(TokenHandler)

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6724223.html 1.回顾 上面的几篇解析了类型模块,在MyBatis中类型模块包含的 ...

  3. CentOS 'mysql/mysql.h': No such file or directory

    需要安装mysql-devel # yum install mysql-devel

  4. js解析器(重要!)

    JavaScript有"预解析"的特性,理解预解析是很重要的,不然在实际开发中可能会遇到很多无法解析的问题,甚至导致程序bug的存在. #js预解析执行过程: 预解析:(全局作用域 ...

  5. 捕获mssqlservice 修改表后的数据,统一存储到特定的表中,之后通过代码同步两个库的数据

    根据之前的一些想法,如果有A,B 两个数据库, 如果把A 用户通过界面产生的更新或者插入修改,操作的数据同步更新到B 库中,如果允许延时2分钟以内 想法一: 通过创建触发器 把变更的数据和对应的表名称 ...

  6. 局域网内补丁更新80072EE2错误

    在公网中,80072ee2通常是在进行自动更新时遇到的连接性错误.通常由于三防杀毒软件或者浏览器,代理服务器设置不正确而导致的.那么如果是在局域网中遇到该问题,该如何解决呢? 错误截图: 1.首先确认 ...

  7. [进程通信] Linux进程间通信(IPC)

    简介 linux下进程间通信的几种主要手段: 1.      管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...

  8. getRequestURI()与getRequestURL()的区别

    引于: http://hi.baidu.com/cloudxpc request.getRequestURI() 返回值类似:/xuejava/requestdemo.jsprequest.getRe ...

  9. Spring Cloud 学习笔记(二)——Netflix

    4 Spring Cloud Netflix Spring Cloud 通过自动配置和绑定到Spring环境和其他Spring编程模型惯例,为Spring Boot应用程序提供Netflix OSS集 ...

  10. 洛谷【P2393】题解

    P2393 [yyy loves Maths II] 原题链接 话说,这题其实方法对了,也蛮水的. 首先方法是一样的,直接扩大忽略精度问题. 其次,我用了c++的函数控制输出小数位数,方法:cout& ...