美文网首页Java 杂谈我爱编程
资深架构师的 AngularJS服务

资深架构师的 AngularJS服务

作者: 认真期待 | 来源:发表于2018-05-07 19:04 被阅读68次

    AngularJS的service层用于处理业务逻辑和数据持久化,以下3钟方法可以创建并注册我们自己的service,在控制器中注入已创建的service服务,就可以调用service里面的属性和方法了。

    1、Factory

    2、Service

    3、Provider

    1、最简单的方式:Factory工厂方法

    Angular里创建service最简单的方式就是使用factory()方法,使用factory()来创建服务的时候,首先创建一个对象,然后在这个对象上添加属性,最后返回这个对象。把这个服务注入控制器中,控制器就可以访问对象上的方法了。

    [javascript] view plain copy

    angular.module('yeomanAngularApp')

    .factory('playerFactory',function(){

    var _players = [

    {"username":"zhangsan",'address':'北京'},

    {"username":"lisi",'address':'上海'},

    {"username":"wangwu",'address':'大连'}

    ];

    var service = {};

    service.getPlayers = function(){

    return _players;

    }

    return service;

    });

    [javascript] view plain copy

    angular.module('yeomanAngularApp')

    .controller('PlayerCtrl', function ($scope,$http,$filter,playerFactory) {

    $scope.playName = $filter('lowercase')('Angular');

    $scope.players = playerService.getPlayers();

    console.log(players);

    })

    2、最直接的方式:Service构造函数方法

    service()与factory用法差不多,区别在于不需要返回一个对象。

    使用service()创建服务时,相当于使用new关键字进行了实例化,只需要在this上添加属性和方法,然后服务会自动返回this。把这个服务注入控制器中,控制器就可以访问对象上的属性方法了。

    [javascript] view plain copy

    angular.module('yeomanAngularApp')

    .service('playerService', function(){

    this.getRemotePlayers = function(){

    var deferred = $q.defer();

    $http({

    method: 'JSONP',

    url: 'url'+'&callback=JSON_CALLBACK'

    }).success(function(data, status) {

    deferred.resove(data);

    }).error(function(data, status) {

    deferred.reject('error');

    });

    return deferred.promise;

    }

    })

    [javascript] view plain copy

    angular.module('yeomanAngularApp')

    .controller('PlayerCtrl', function ($scope,$http,$filter,playerService) {

    $scope.players = playerService.getRemotePlayers();

    console.log(players);

    })

    3、最通用的方式:Provider方法

    provider是唯一一种可以创建用来注入到config()函数的服务的方式。如果要在service对象启动之前先进行模块范围的配置,应使用Provider。

    [javascript] view plain copy

    angular.module('yeomanAngularApp')

    .provider('playerProvider',function(){

    this._players = [

    {"username":"zhangsan",'address':'北京'},

    {"username":"lisi",'address':'上海'},

    {"username":"wangwu",'address':'大连'}

    ];

    this.paramFromConfig = '';

    this.$get = function(){

    var that = this;

    return{

    getPlayers: function(){

    return that._players;

    },

    paramOnConfig: that.paramFromConfig

    }

    }

    })

    .config(function(playerProviderProvider){

    playerProviderProvider.paramFromConfig = 'param from config';

    })

    [javascript] view plain copy

    angular.module('yeomanAngularApp')

    .controller('PlayerCtrl', function ($scope,$http,$filter,playerProvider) {

    $scope.playName = $filter('lowercase')('Angular');

    $scope.players = playerService.getPlayers();

    console.log(players);

    })

    在此我向大家推荐一个架构学习交流群。交流学习群号: 744642380, 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良

    相关文章

      网友评论

      本文标题:资深架构师的 AngularJS服务

      本文链接:https://www.haomeiwen.com/subject/gawvrftx.html