这是参照angular官网制作的备忘录,下面的代码地址: note/diary/Angular_20160123/0224-TODOlist.html
制作一个简单地angular备忘录应用,首先要明确以下步骤:
一、 使用一个对象数组记录总事件,事件对象有三个属性,
- text内容
- date到期时间
- done完成情况
二、 记录数组长度,根据done的情况记录剩余事件个数;
三、 使用ng-repeat来显示数组中的事件,并在每件事件前放置一个checkbox来记录是否完成,并以此来设置done的值。
四、 使用三个input框来输入事件、到期时间以及进行提交,每次提交事件对象会被保存在时间数组中并显示出来;
五、 设置清空按钮,点击会将done为true的事件对象从数组中删除;
六、 对date和当前时间进行比较,若是超过当前时间,则内容显示颜色改变;
本例注意
1. 使用的控制对象
本例中并没有使用$scope
全局对象来进行双向数据绑定,本例中使用的方式如下:
在HTML模板中设置控制器时
<div ng-controller = "todoListCtrl as todoList" >
在js的controller中设置时如下:
var app = angular.module("todoApp",[]); app.controller("todoListCtrl",function(){ var todoList = this; todoList.addevent=function(){}; });
此例中没有传入$scope对象,而相当于用一个todoList来作为这个模块的的一个对象,包含了一系列控制这个模块的属性和方法;
2. 禁止空白提交
var re_blank = /^[\s\u3000]*$/ig;
if (re_blank.test(todoList.todoText)||todoList.todoText===undefined) {
alert('请输入内容');
return false;
}else{
...
}
最上面一行使用正则表达式检测半角、全角空格,但本例最初内容应该是undefined,在下一行进行检测。
3. 日期比较
首先说一说js中的date对象,当传入参数值,则值为参数表示的值(实际上传入的参数是经过后台Date.parse或者Date.UTC处理的),如不传入参数,则获取当前值;
对于日期的比较,是后台调用了Date类型的valueOf()方法,返回日期的毫秒表示, 所以是可以直接用日期进行比较的。
var date1 = new Date(2016,2,3);
var date2 = new Date();
if(date1>date2){...}
日期进行比较时,如上所示,是后台调用了valueOf()的方法,若是日期进行了格式化,如下:
var date1 = (new Date(2016,2,3)).toDateString();
var date2 = new Date().toDateString();
if(date1>date2){...}
这样是不能比较的。
4. angular 表达式
angular的表达式中是可以进行简单运算的,并且js中的一些基本函数也可以在其中使用。