发布于 2016-01-01 08:06:03 | 603 次阅读 | 评论: 0 | 来源: PHPERZ
AngularJS 前端JS框架
AngularJS诞生于Google是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入,等等。
对于 service 和factory 的实现
function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); }
function service(name, constructor) {
return factory(name, ['$injector', function($injector) {
//
return $injector.instantiate(constructor);
}]);
}
对于 factory 是调用 provider 实现的,
对于service 是调用factrory 方法,但是 关注到 $injector.instantiate ,在这个函数里面 servide会接收一个由$injector 实用new 关键字实例化的一个构造器对象。
对于同一个功能的service 和factory
var app = angular.module('app',[]);
app.service('helloWorldService', function(){
this.hello = function() {
return "Hello World";
};});
app.factory('helloWorldFactory', function(){
// 返回的是 {} 对象集合
return {
hello: function() {
return "Hello World";
}
}});
但是factory 对于service 更加灵活些,因为他可以使用new关键词返回函数
Factories offer slightly more flexibility than services because they can return functions which can then be new'd
所以从面向对象编程的工厂模式来说,一个factory 可以是一个用于创建其它对象的对象。
app.factory('helloFactory', function() {
// 返回的是一个 function
return function(name) {
this.name = name;
this.hello = function() {
return "Hello " + this.name;
};
};
});
而在使用的时候
app.controller('helloCtrl', function($scope, helloWorldService, helloWorldFactory, helloFactory) {
init = function() {
// 返回的是一个对象
helloWorldService.hello(); //'Hello World'
// 返回的是一个 对象
helloWorldFactory.hello(); //'Hello World'
// 返回的是一个 函数
new helloFactory('Readers').hello() //'Hello Readers'
}
init();
});
Factory更加适用于当你在设计一个需要私有方法的类的时候使用
app.factory('privateFactory', function(){
// 私有实现
var privateFunc = function(name) {
return name.split("").reverse().join(""); //reverses the name
};
return {
hello: function(name){
return "Hello " + privateFunc(name);
}
};});
在这个例子中privateFactory含有一个不能被外部访问的私有privateFunc函数。这种使用方式services也可以实现,但是使用Factory代码结构显得更加清晰。