关于 AngularJs 服务和工厂的基础知识

为什么我们需要 AngularJs 服务和工厂?

如果我们对 AngularJs 有所了解,也许我们了解 MVC 架构并听说过 AngularJs 控制器。
但有时我们需要为所有(或者某些)控制器提供全局性的东西,例如一些函数,或者变量,有助于我们交流的动作与服务器端等...那么我们现在可以做什么?

由于 AngularJS 现在是一个已弃用的框架,我们可以改用 JavaScript 现代框架,如 Vuejs、React 和 Angular。

AngularJs 不会如此强大,如果没有它是解决此类问题的组件。
AngularJs 建议我们使用服务和工厂(有时是值和常量)来为控制器和许多其他 AngularJs 组件提供全局操作和变量。
让我们看看我们如何定义一个简单的服务

angular.module('MyModule', [...])
  .service('MyService', ['$http', function($http){
    return {
       users: [...],
       getUserFriends: function(userId){
          return $http({
            method: 'GET',
            url: '/api/user/friends/' + userId
          });
       },
       deleteUserFriend: function(userId, friendId){
          return $http({
            method: 'DELETE'
            url: '/api/user/delete/friend/' + userId +'/' + friendId
          });
       }
       ....
    }
  }])

你可以做同样的事情,使用 AngularJs 工厂。
同样的方式,只需将“服务”替换为“工厂”。
现在让我们看看我们如何使用该服务。
让我们定义一个简单的控制器并使用该服务。

angular.module('MyModule')
  .controller('MyController', ['$scope', 'MyService', function($scope, MyService){
    $scope.users = MyService.users //some items inside array
    $scope.deleteUserFriend = function(userId, friendId){
      if(userId && friendId){
        MyService.deleteUserFriend(userId, friendId)
          .success(function(res, ...){
            //on success function
          })
          .error(function(res, ...){
            //on error function
          })
      }
      ...
    }
  }])

如我们所见,Service 和 Factories 让我们拥有一些服务功能,与服务器通信、存储数据等......

AngularJs 允许我们在其他 AngularJs 组件中使用服务和工厂,比如指令、工厂,甚至在服务内部。

日期:2020-06-02 22:18:46 来源:oir作者:oir