angular
作者:毫末科技
邮箱:hxg@haomo-studio.com
angular是什么?
AngularJS 最初由Misko Hevery 和Adam Abrons于2009年开发,后来成为了Google公司的项目。AngularJS弥补了HTML在构建应用方面的不足,其通过使用标识符(directives)结构,来扩展Web应用中的HTML词汇,使开发者可以使用HTML来声明动态内容,从而使得Web开发和测试工作变得更加容易。
安装angular
bower install --save-dev angular
常用的指令
mg-app
ng-model
ng-controller
ng-if
ng-show
ng-hide
ng-repeat
服务
angular提供了3种方法来创建并注册我们自己的service
- Factory,
- Service,
- Provider
例子:
value 传递值
let app = angular.module("app",[]);
app.value("name","yide");
app.controller("myController",function($scope,name,){
$scope.title = name;
})
service (new 实例化)
angular.module("app").service("ydserve",function(){
this.name = "我是一个服务层";
});
factory (执行实例化)
angular.module("app").factory("util",function(){
return {
sum:function(number1,number2){
return number1 + number2;
}
};
});
provider
(是唯一一种你可以传进 .config() 函数的 service。当你想要在 service 对象启用之前,先进行模块范围的配置,那就应该用 provider)
tips:得到的是$get() 执行之后的数据
angular.module("app").provider("ydprovider",function(){
var _this = this;
this.name = "provideryd";
this.$get = function(){
return {name:_this.name}
}
});
参考文献:http://www.oschina.net/translate/angularjs-factory-vs-service-vs-provider
config
tips:注意名字后面加Provider
常用的$provide $compileProvider
angular.module("app").config(function(ydproviderProvider){
ydproviderProvider.name = "config";
});
directive
priority
template
返回函数的时候函数里面要返回string (第二个形参看作元素)
返回对象
templateUrl
//缓存
angular.module("app").run(["$templateCache",function($templateCache){
$templateCache.put("yd.html","<div><h1>Hi 我是缓存的</h1></div>")
}]);
angular.module("app").directive("yd",function(){
let template = {
restrict:"E",
templateUrl:"yd.html",
replace:true
}
return template;
});
replace:是否替换原标签
transclude
restrict E(元素),A(属性),C(类),M(注释) (默认为A)
E(元素):<directiveName></directiveName>
A(属性):<div directiveName='expression'></div>
C(类): <div class='directiveName'></div>
M(注释):<--directive:directiveName expression-->
scope
false:同用一个scope
true:继承父scope如果自己有侧不用父scope的了
{}:不继承自己是单独的
隔离之后的双向绑定
{user: "="} 这个scope的user于父scope的user同步
{user: "@"} 父会改变它 它不会改变父
{fn: "&"} 拿到父的user这个函数
<div>Say:<br>改变父scope的name:<input type="text" value="" ng-model="name"/></div>
</div>
<div>隔离scope:
<div yd name=""></div>
</div>
<div>隔离scope(不使用父scope ):
<div yd name="name"></div>
compile
link
filter
angular.module("app").filter("reverse",function(){
return function(text,flag){
if(flag){
return text.split("").reverse().join("");
}
return text;
}
});
$q
let promise = function(){
let deferred = $q.defer();
$http({
method:"GET",
url:"https://jsonplaceholder.typicode.com/users/"+Math.ceil(Math.random()*10)
}).then(function(data){
deferred.resolve(data);
},function(data){
deferred.reject(data)
});
return deferred.promise;//返回promise对象
}
var p1 = promise();
p1.then(function(na){
// alert(JSON.stringify(na));
},function(na){
// alert(JSON.stringify(na));
}).finally(function(){
// alert("反正我是最后执行的");
});
$q.all([promise(),promise(),p1]).then(function(result){
result.forEach(function(v,i){
console.log(v.data.name);
});
});
ui-router
$stateProvider