关闭

angularJS自定义服务的几种方式

时间: 2019-01-29阅读: 1083标签: angular

在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中的服务也有异曲同工之妙,在某种程度上可以使用服务进行状态管理。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1903

关闭

angular动态绑定样式以及改变UI框架样式的方法

ngClass要绑定的类名会在tr根据数据循环生成html的过程中调用组件中定义的isHideClass方法,并把i(index)带过去让方法使用根据方法逻辑返回的类名去绑定写好的样式

什么是angular依赖注入?

依赖注入是Angular的重要特性之一,依赖注入简化了Angular解析模块/组件之间依赖的过程。依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下, 一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中

Angular HMR(热模块替换)功能实现方法

在使用Angular的时候,希望能像VUE那样,修改代码后浏览器不刷新,页面对应修改的组件自动更新的功能。这个功能的名字时HMR (hot module replace)。稍微研究了一下,发现在angular/cli创建的项目中,实现这个不算太难,步骤如下

AngularJS 指令实践

指令(Directives)是所有AngularJS应用最重要的部分。尽管AngularJS已经提供了非常丰富的指令,但还是经常需要创建应用特定的指令。这篇教程会为你讲述如何自定义指令,以及介绍如何在实际项目中使用

AngularJS中几种Providers的区别

AngularJS文档对provider的定义:provider是一个带有$get()方法的对象。injector调用$get方法创建一个新的service的实例。provider还有一些其他的方法,可以用来配置provider。

我为什么选择 Angular 2?

没有选择是痛苦的,有太多的选择却更加痛苦。而后者正是目前前端领域的真实写照。新的框架层出不穷:它难吗?它写得快吗?可维护性怎样?运行性能如何?社区如何?前景怎样?好就业吗?好招人吗?组建团队容易吗?

Angular有哪些版本?

目前Angular有7个版本,分别为:AngularJS、Angular2、Angular4、Angular5、Angular6、Angular7、Angular8。下面本篇文章就来给大家介绍一下,希望对大家有所帮助。

使用wepack、typescript创建一个angularjs项目

angularjs是一个非常老的框架,如果你准备用angular启动新项目,完全可以使用angular而不是angularjs。 但是有时候我们需要维护老的angularjs项目,但是又想把angularjs升级

Angular 如何处理未可知异常错误

代码写得再好,始终都无法完整的处理所有可能产生异常,特别是生产环境中的应用,很大一部分是数据来自用户、远程,很难保证所有数据都按程序规定的产生。事实上,除非测试人员发现或者客户报告,否则都无法得知。因此

angular有必要学吗?

对于前端开发人员来说,angular是非常有必要学习的,它可以使Web应用开发比以往更简单、更快捷;同时也降低了构建复杂应用的难度。更何况很多后端职位都要求掌握angular了。Angular是一个使用 HTML 和 JavaScript 编写的 Web 前端框架

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!