一、jade
从第三张卡开始使用jade代替html进行网页编程。jade是一款高性能简洁易懂的HTML模板引擎,是用javascript实现的。jade使用简洁的语言规则通过编译转成html文件,大大缩短了写网页的时间,更加灵活易用。jade和html、haml一样,也是用不同的标签代表不同的属性元素,只是使用的标签的表示方法跟html和haml不一样罢了。
1、安装jade插件
- //安装到自己的工程文件夹下
- npm install grunt-contrib-jade
- npm install grunt-contrib-jade --save-dev
找到工程文件夹下的Gruntfile.js文件,在module.exports = function (grunt)(该函数方法,在Gruntfile
文件中通过modules.exports
告诉Node
定义Grunt配置,并返回一个函数)函数里面添加“grunt.loadNpmTasks('grunt-jade');”。该命令告诉grunt从grunt-jade包中加载命令。
然后找到grunt.initConfig函数里面的watch{}添加
- jade: {
- files: ['<%= yeoman.app %>/views/*'],
- tasks: ['jade']
- },
最后在grunt.initConfig函数里面添加需要进行转化的jade和html文件,例如:
- jade:{
- bid_register: {
- src: 'app/views/bid_register.jade',
- dest: 'app/views/bid_register.html'
- },
- ,
2、jade标记
jade标记跟html标记差不多,通常是html标签去掉<>,并且是使用一个代替一对开始结束标签。例如:
- html
对应
- <html></html>
标记也有id
- div#container
将被渲染成
- <div id="container"></div>
其中div是可以去掉的。
类的处理使用“.类名”,多个类可以串到一起,还可以跟id一起使用,即
- #foo.bar.baz
对应
- <div id="foo" class="bar baz"></div>
文本标记
- p wahoo!
对应
- <p>wahoo!</p>
大段文本文本块可使用“|”或“.”来表示
- p
- | foo bar baz
- | rawr rawr
- | super cool
- | go jade go
渲染成
- <p>foo bar baz rawr.....</p>
转义输出元素
如果我们传入{ locals: { name: '一回', email: 'xianlihua[at]gmail.com' }},可以这样做提取信息:
- #user #{name} <#{email}>
对用html
- <div id="user">一回 <xianlihua[at]gmail.com></div>
当使用标记表示其他信息时我们需要转义一下
- p \#{CSSer, 关注Javascript技术}
对应
- <p>#{CSSer, 关注Javascript技术}</p>
也可以使用反转义变量!{html}输出html所代表的其他信息
嵌套:(jade以缩进的形式判断嵌套的逻辑关系)
- ul
- li.first
- a(href='#') foo
- li
- a(href='#') bar
- li.last
- a(href='#') baz
快扩展(不会另起一行而是在同一行进行扩展)
- ul
- li.first: a(href='#') foo
- li: a(href='#') bar
- li.last: a(href='#') baz
与上面的结果相同
标记的一些属性信息可以表示在()里,例如:其中“=”可以换成“:”
- a(href='/login', title='View login page') Login
- input(type="checkbox", checked)
二、underscore方法应用
第三张卡的实现功能跟第二张卡的方法一样,可以参考第二张卡,下面来说一下第四张卡的重难点。
第四张卡的主要难点在排序和自动弹框上。排序如果自己写方法,就会出现for循环和if的无限嵌套,逻辑思路特别混乱,使用underscore自带的js方法实现起来则非常简单。在接下来的重构中也会非常有用。下面主要讲以下排序的几个重要函数应用
1、find和filter
- _.find(list, predicate, [context])
在list数组列表中逐项查找,返回第一个通过predicate迭代函数真值检测的元素值,如果没有值传递给测试迭代器将返回undefined。 如果找到匹配的元素,函数将立即返回,不会遍历整个list。
- _.filter(list, predicate, [context])
遍历list中的每项值,返回包含所有通过predicate真值检测的元素值。即将符合条件的值存到一个数组中并返回。
例如:
- var num = [1,2,3,4,5];
- var a = _.find(num, function(num){return num == 2;});
- //a的结果是:2
- var a = _.filter(num, function(num){return num == 2;}); //a的结果是[2]
2、sortBy
sortBy方法根据处理函数的返回值,返回一个排序后的集合,以升序排列。
- var list_sort = _.sortBy(list, function (list) {
- return list.price;
- }) //根据价格对list进行升序排序并赋给list_sort
3、countBy
- var list_count=_.countBy(list, function (list) {
- return list.price ;
- }) //根据价格对数组对像进行分组,返回相同价格所对应的个数作为一个对象存储到数组里赋给bist_count
4、map
map方法对集合的每个成员依次进行某种操作,将返回的值依次存入一个新的数组。
- _.map([1, 2, 3], function(num){ return num * 3; });
- // [3, 6, 9]
- _.map({one : 1, two : 2, three : 3}, function(num, key){ return num * 3; });
- // [3, 6, 9]
return里要定义返回的数组的对象的表达方式或属性
- var pricegroup = _.map(count_pricegroup, function (value, key) {
- return {"price": key, "count": value};
- });
- /把统计出的人数和价格按 {"price":key,"count":value }的形式存储到pricegroup数组中
三、JavaScript 插件之模态框及事件处理
1、模态框
模态框是自定义的弹出框,要使用模态框首先要下载bootstrap相对应的插件资源css、js文件,然后再自己编写代码设计样式。具体代码如下:
- <div class="modal fade">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
- <h4 class="modal-title">Modal title</h4>
- </div>
- <div class="modal-body">
- <p>One fine body…</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div><!-- /.modal-content -->
- </div><!-- /.modal-dialog -->
- </div><!-- /.modal -->
模态框的定义遵循嵌套的原则,其中整个模态框的对话框内容包含modal-header、modal-body、modal-footer,可以根据自己的实际情况进行设计。
在JS 文件中如果想要显示该模态框,就要执行下面代码:
- $('#bid_resultsModal').modal("show");//bid_resultsModal为自定义的模态框的id
如果要隐藏就要把show改为hide
2、事件处理
卡4要求,弹框停留3s,自动关闭,这里有两种方法
法一:使用anjularjs自带的timeout指令,function里写3s之后执行的操作
- $timeout(function () {
- $('#bid_resultsModal').modal('hide');
- }, 3000);
法二:或使用setTimeout方法
- setTimeout(function(){
- $('#bid_resultsModal').modal('hide')}
- ,3000);
四、其他问题
我把所有的数据都存在了一个数组里,当存得数据多的时候由于ng-repeat的原因会出现一个不认识的随机键值,类似$004.解决方法在ng-repeat后加track by $index,例如
- ng-repeat="bidding in activity track by $index"
相关推荐
angularJS_学习资料
《AngularJS即学即用》【书本源码下载】 书本的随书源码正式版下载
AngularJS学习手册 源代码
本分卷由2345好压(Haozip)生成,请使用2345好压来解压。 ...分卷文件共有以下2个: AngularJS即学即用 (美)夏德瑞 格林 译者 朱磊.haozip01.zip AngularJS即学即用 (美)夏德瑞 格林 译者 朱磊.haozip02.zip
AngularJS 学习资料 Android学习
AngularJS是google在维护,其在国外已经十分火热,可是国内的使用情况却有不小的差距,参考文献/网络文章也...这里便将我学习AngularJS写成文档,一方面作为自己学习路程上的记录,另一方面也给有兴趣的同学一些参考。
angularjs的学习资料,分享给你们。
强大有用的学习资源,只是为初学者的量身定做的ppt,书名为《AngularJS的权威学习指南》。可以让初学者快速的掌握技能。
学习AngularJS很好的帮手,本文件是CHM文件,查看方便,使用方便!
AngularJs入门学习实例,博客文章地址:http://blog.csdn.net/mqy1023/article/details/51540503
AngularJS学习
AngularJS 是一个 JavaScript框架。它是一个以 JavaScript 编写的库。它可通过 [removed] 标签添加到HTML 页面。 AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML。 AngularJS 是以一个 JavaScript...
MovieCat 用angularjs写的一个前端网页
第4章 显示与格式化数据 第5章 创建高级表单 第6章 导航 第7章 安全 第8章 创建自定义指令 第9章 创建高级指令 第10章 创建为全球用户服务的AngularJS应用 第11章 开发健壮的AngularJS应用 第12章 打包和...
angularjs 即学即用 英文版 PDF,书中的例子是基于1.2.x的angularjs,这个大家一定要明白,不要使用1.6.x的版本去做实验。 另外,书中的很多例子也不在有效了,大家可以参考看一下,但讲原理还是不错的一本书。
angularjs学习需要导入的angular.js
AngularJS 高级程序设计编程学习代码
Angularjs基础入门PPT,非常适合初学者及有PPT制作需求的同学。
ANGULARJS学习总结.pdf