最近在改一个前后端分离的项目,前端用的Angular 1.4.5,后端用的java,由于AngularJs在4年前简单的使用过一次,大多都忘记了,这次拿到这个项目(前端被压缩过),第一眼就瞬间懵逼了,但是领导已经下了死命令了,也只得硬着头皮干,索性就把这次遇到的一些知识点记录一下。
控制器&作用域
ng-controller 指令指定使用的控制器,ng-app 指令初始化一个 AngularJS 应用程序,$scope作用域作为当前controller范围内的数据传输纽带,在controller中的$scope上添加相应的对象或者属性,在html即可使用
1 | <div ng-app="myApp" ng-controller="myCtrl"> |
表达式
,AngularJS 表达式可包含文字、运算符、变量、对象,将表达式中的内容绑定到HTML中1 | div ng-app="myApp" ng-controller="myCtrl"> |
ng-model 指令
数据双向绑定,在界面或者js中改变绑定变量的值,另一边也会随之影响
1 | <!DOCTYPE html> |
自定义指令
Angular可以使用directive 来自定义指令
1 | angular.module("app").directive("pivottableViewPanel", |
restrict 值可以是以下几种:
- E 作为元素名使用
- A 作为属性使用
- C 作为类名使用
- M 作为注释使用
templateUrl:指定组件引用的html,可以是html代码也可以是html路径;
scope:定义组件属性:
@:单项绑定的前缀标识符,例如:;
=:双向数据绑定前缀标识符,例如:;
<:单项绑定的前缀标识符,和=使用类似,例如:,但是不会影响父组件对象的值;
&:绑定函数方法的前缀标识符,例如:
我们定义好的组件有一下几种方式可以调用: - 元素名:
<pivottable-view-panel></pivottable-view-panel>
; - 属性:
<div pivottable-view-panel></div>
; - 类名:
<div class="pivottable-view-panel"></div>
; - 注解:
<!--directive: pivottable-view-panel-->
;
这里需要注意的是,组件用驼峰命名法,Angular会自动将大写字母转为小写且在字母前以-隔开,在定义的scope中,如果对象属性只有值,默认组件属性是属性名转换后的名称,如果属性有值则使用属性值转换后的属性1
2
3
4
5
6
7
8
9
10
11
12scope: {
authType: "@",
authId: "=",
appChange(): "&"
}
用的时候则是<xxx auth-id></xxx>
scope: {
authType: "@",
authId: "=curAuthId",
appChange(): "&"
}
用的时候则是<xxx cur-auth-id></xxx>
自定义服务
Service是一个函数或对象,AngularJs自带了30多个服务,例如$http(向服务器请求数据)、$timeout(setTimeout),也可以自定义
1 | angular.module("demo").service("dataSetService",function(){ |
使用的话需要在控制器中注入这个Service
1 | angular.module("demo").controller('myCtrl', function($scope, dataSetService) { |
依赖注入
Angular提供了依赖注入功能,在使用的时候,加入事先定义好的service/factory/provider即可在自动注入
1 | function ($q, $timeout, dataAjaxService) { |
未完待续