angular_todolist

这是参照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中的一些基本函数也可以在其中使用。