AngularJS自定义服务深度解析:factory、service、provider

0 下载量 132 浏览量 更新于2024-08-30 收藏 53KB PDF 举报
"AngularJS之自定义服务详解(factory、service、provider)" 在AngularJS中,创建自定义服务是实现代码复用和模块化的关键。这里主要介绍三种方式来创建自定义服务:Factory、Service以及Provider。 1. Factory Factory是最常见的创建服务的方式。它允许我们返回一个值,这个值可以是对象、函数或任何JavaScript类型。当我们在应用程序中注入并使用Factory时,我们将得到在Factory中定义的那个返回值。以下是一个简单的Factory示例: ```javascript app.factory('myFactory', function() { var service = { name: "张三", setAge: function(newAge) { age = newAge; }, getAge: function() { return age; } }; var age; return service; // 返回这个包含属性和方法的对象 }); ``` 在这个例子中,`myFactory`返回一个拥有`name`属性和两个方法(`setAge`和`getAge`)的对象。在Controller中,我们可以注入`myFactory`并访问这些属性和方法。 2. Service Service也是用于创建服务的一种方式,它使用构造函数创建单例对象。Service中的所有属性和方法都是在构造函数中定义的,与Factory相比,Service通常用于实例化类。下面是一个Service的例子: ```javascript app.service('myService', function() { this.name = "李四"; this.setAge = function(newAge) { this.age = newAge; }; this.getAge = function() { return this.age; }; }); ``` 在这里,`myService`返回的是一个实例,而不是一个对象字面量。Service保证在整个应用程序中只有一个实例。 3. Provider Provider是最强大的服务创建方式,它允许我们在配置阶段(即应用启动之前)定义服务的行为。Provider通常用于配置全局设置或依赖于运行时环境的服务。Provider有两个方法:`$get`和`config`。`$get`方法用于返回服务实例,而`config`方法则在应用初始化时使用。Provider的例子如下: ```javascript app.provider('myProvider', function() { var defaultAge = 25; this.setDefaultAge = function(age) { defaultAge = age; }; this.$get = function() { return { name: "王五", setAge: function(newAge) { this.age = newAge || defaultAge; }, getAge: function() { return this.age; } }; }; }); ``` 在配置阶段,我们可以调用`myProvider.setDefaultAge`来改变默认年龄,然后在运行时,`$get`会返回一个包含了`name`、`setAge`和`getAge`的对象。 在AngularJS中,分层架构是非常重要的概念。借鉴了后端开发的分层思想,AngularJS应用通常分为以下几层: - DAO(Data Access Object)层:对应于Model层,负责处理与服务器的通信,如Ajax请求,通常通过AngularJS的$http或$resource服务实现。 - Service层:主要负责业务逻辑,可以持久化数据,提供给多个Controller复用。在AngularJS中,Service层也可以作为数据容器,存储和处理数据。 - Controller层:控制视图的行为,接收用户输入,调用Service层的方法,更新视图。Controller应尽可能保持简洁,避免复杂的业务逻辑。 理解并熟练运用Factory、Service和Provider,能帮助开发者更好地组织和管理AngularJS应用的代码,提高可维护性和复用性。