来公司有二十天了,前一个星期在学bootstrap框架,接着就是angular,到现在也有两周了,学的还是一脸懵逼,不知所以然。
昨天老大直接把公司的项目代码发给我,让我先熟悉代码,心想着估计不久可能就要开始干活了。看了下代码,大概认出一些东西,知道用到的框架是angular,但具体的还是一点都不懂,所以从昨晚开始又重新刷了下angular教程。PS:之前学了一遍,由于基础并不是特别好,然后教程讲的也比较枯燥,很多时候是看着看着就要睡着了,所以对angular只了解了大概。现在重新认真的学一遍angular,顺便写写自己的收获,也算是温故知新吧。
先搭建angular框架 (此段代码必须背下来),代码如下:
<head>
<script src=" ../angular.min.js">
</head>
<body>
<div ng-app='hd' ng-controller='ctrl'>
<script>
var m=angular.module('hd' []);
m.angular('ctrl',['$scope' function($scope){
}])
</script>
</body>
先引用angular的插件,然后定义一个模块hd,(注意 以ng-开头的都为控制器中的内容),接着在模块中定义一个控制器ctrl, 接着在controller中放入视图模型scope PS:此处写法有两种,具体看文档,但推荐用以上代码模式。
angular两个特点:双向数据绑定,依赖注入(此处以后详解)。
先了解具体内部结构:
1.angular内部指令:
1)ng-app不指定值时,angular会加载一个不带特定模块的应用;
ng-app指定值时,angular会加载一个与这指令有关的模块。
且ng-app不可缺失。
2)ng-init
初始化数组的数据,即给定义的指令赋初值,
3) ng-model
将当前的作用域中的属性同给定的元素进行绑定,如果作用域中的属性不存在,他会隐式的创建一个并添加到当前的作用域中去。
4)ng-show与ng-if
此用于页面显示标签的内容或隐藏其内容,且两者作用想反。
5)ng-click
点击,用于按钮Button
6)ng-switch
转换。
7)ng-repeat
用于遍历数组或字符数组,代码如下:
<body ng-app='' ng-controller=' ctrl'>
<div ng-repeat="a in arr">{{a}</div>
</body>
注释——其中,arr为定义在视图中的一串字符 eg:"arr={1,2,3}"
8)track by
在使用ng-repeat时防止元素出现重复。
9)
<li ng-repeat="t in attr" track by $index>{{t}}</li>
10)
2.控制器controller
控制器的使用,此处主要考虑其访问权限即可;
子级的controller可以访问父级的控制器,即子级控制器克继承父级控制器内元素的内容,但是父级不可访问子级控制器的内容,且同级控制器作用域之间也不可访问。
3.过滤器
常用过滤器
1)orderBy 元素的排序
<li ng-repeat="item in items" | orderBy:'age' ">{{item}}</li>
注释:遍历集合items中的各个元素,并将按照age大小进行排序。
| 为管道连接符,用于连接两个功能块,且可以继续增加其它功能,继续连用该管道连接符
2)limitTo 限制返回元素的个数
{{hello | limitTo:2}} -->he
{{hello |limitTo:-2}}-->lo
3) filter 过滤指定内容且不分字段的筛选出内容
<li ng-repeat="x in arr" | filter="三">{{x}}</li>
遍历arr中的内容,并将还有“三”的数据查询出来。
----------------------------------------
自定义过滤器
代码: {{"hello" | myfilter}}
*********
app.filter("myfilter" function(){
return function(val){
return val.toUppperCase();
}
})
将hello变为大写。
--------------------------------------------
五个常用过滤器:
currency ;date ;number ;lowercase ;uppercase
currency:货币符号
date :日期
number :保留小数点后的位数
lowercase/ uppercase :转换大小写
用法:
{{price | currency :"$"}}
其它几个类比。
{{time | date :"yyyy-MM-dd hh-mm-ss"}} 时间过滤
4.
自定义指令
声明自定义指令先调用directive方法
调用方法和调用controller方法一致,m.directive{***};
在方法内部会有配置项 模板template ,templateUrl ,详解见教程。
replace 调换内容。
restrict:可选参数,决定该指令在dom中以何种方式声明
默认值为EA,除此之外还有ECMA,
E:标签
C:样式
M:注释
A:属性
(一般在模块中定义,根据具体要求选用适合的声明方式)
5. 将控制器绑定到自定义指令上
首先声明控制器(必须声明),然后在定义自定义指令。
1)
eg:
app.controller("mycontroller" ,["$scope" function($scope){
$scope.name=" ";
}])
app.directive("mydirective" function (){
scope:{
name:"@" //单向数据绑定,即父级向子级单向传递数据。
}
return {
controller:"mycontroller" //进行数据绑定。
}
})
transclude :保存信息
2)自定义指令写在controller中
<div ng-app="mycontroller">
<my-directive></my-directive>
</div>
<script>
var app=angular.module("mycontroller" [])
app.directive("mydirective" function(){
return {
template:<div> 自定义标签</div>
}
})
-----------------------------
自定义指令中scope:{}是angular中最强大的功能。当指定scope为对象时,表明创建了一个隔离域,此作用域不与其他任何作用域产生依赖影响,即不可继承父级的值。
指定 {} 中的内容时,可通过一系列前缀标识符引用元素的属性,这些前缀分别为@ / = / &或attr
@ 标识符,单向绑定(也称字符串绑定)
add directive("mydirective" function(){
return{
scope:{
myname:“@”
name:“@myname” //与上的意思一样,写法稍有区别 ;表示单向数据绑定
psg:"=" //等于号 = 表示双向数据绑定
pfun:"&" //方法传递
// & 将父级的方法向指令传递,供指令调用 ;其它用法与@用法一样。
}
}
})
附上课件视频地址:http://study.163.com/course/courseLearn.htm?courseId=1004018030#/learn/video?lessonId=1047988799&courseId=1004018030