angularJS自定义服务的几种方式
在angularJS中定义服务共有四种常见的方式:factory,service,provider,constant,value 使用形式的不同: 1)factory以返回对象的形式定义服务: myapp.factory(‘factorySer‘,[function() { return { getName: function () { return ‘your name is tomHason-factory‘; } } }]) 2)service是使用new关键字实例化,所以直接使用this定义 myapp.service(‘serviceSer‘,[function() { this.getName = function () { return ‘your name is tomHason-service‘; } }]) 3)provider比较特殊,在定义服务的时候必须使用$get函数返回一个对象 能注入到config的service,这样定义的service在你开始注入之前就已经实例化,开发共享的模块的时候常常使用它,能够在使用之前进行配置,比如你可能需要配置你的服务端的url // 能注入到config的service,这样定义的service在你开始注入之前就已经实例化,开发共享的模块的时候常常使用它,能够在使用之前进行配置,比如你可能需要配置你的服务端的url myapp.provider(‘providerSer‘,[function () { this.$get = function() { return { name: ‘your name is tomHason-provider‘,getName: function () { return this.name; },setName: function (name) { return this.name = name; } } } }]) 4)constant一般用于常量定义 能注入到config的服务 myapp.constant(‘constantSer‘,{name: ‘Greasy Giant‘,age: 32}); 5)value与constant一样是用于定义常量的 myapp.value(‘valueSer‘,{name:‘tomHsm-valuse‘})
关于provider,以及constant在angularModule.config函数中的使用方式简单例子 AngularJS模块可以在被加载和执行之前对其自身进行配置。我们可以在应用的加载阶段应用不同的逻辑组对其修改,在模块加载阶段,AngularJS会在提供者(provide)注册和配置的过程中对模块进行配置。 在整个AngularJS的工作流中,这个阶段是唯一能够在应用启动前对其进行修改的部分。 关于angularJS的config函数使用较多的地方就是配置路由的ui-router 下面是一个简单provider服务使用在congfig函数中的例子: app.js define([‘angular‘],function(angular) { var myapp = angular.module(‘myapp‘,[‘ui.router‘]); myapp.provider(‘MyProvider‘,function() { var defaultName = ‘anonymous‘; var name = defaultName; this.setName = function(newName) { name = newName; } this.getName = function () { return name; } this.$get = function() { var result = {}; result.name = name; result.defaultName = defaultName; result.getName = function () { return this.name; } result.setName = function (name) { this.name = name } return result; } }) myapp.constant(‘apiKey‘,‘123123123‘) myapp.config([‘$translateProvider‘,‘apiKey‘,‘MyProviderProvider‘,function($translateProvider,apiKey,MyProviderProvider) { MyProviderProvider.setName(‘Angularjs‘); 可以看到的是我们在模块定义的时候定义了一个provider形式的服务MyProvider,在config函数中使用了其setName()方法进行name的初始化【在config使用的时候是`服务名+‘Provider’`的形式】 在控制器中使用这个服务的时候和其他服务形式是一样的 define([‘app‘,‘service/service.methods‘],function(myapp){ myapp.controller("servicesMethodsCtrl",["$scope",‘$state‘,"$timeout","factorySer","serviceSer","constantSer",‘valueSer‘,‘providerSer‘,‘MyProvider‘,function($scope,$state,$timeout,factorySer,serviceSer,constantSer,valueSer,providerSer,MyProvider){ console.log("this is servicesMethodsCtrl"); $timeout(function () { MyProvider.setName("vueJS"); $scope.MyProviderName = MyProvider.getName(); $scope.$apply(); },2000)
借题发挥: 现如今项目十分复杂,涉及状态难以管理,于是就有了vuex,redux等等比较优秀的状态管理工具,本质上是全局定义一个对象,给几个api进行对象的属性维护。 那么在angularJS中的服务也有异曲同工之妙,在某种程度上可以使用服务进行状态管理。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |