正确使用Angular服务

时间:2015-02-18 08:05:57

标签: javascript angularjs angularjs-scope angular-services

我目前正在设计一个商店管理系统,只是简单地接收和取出商店项目,此时我在我的AngularJS应用程序中有一个服务,它加载了所有可用的项目,看起来像这样:

storeApp.service("partsService", function ($http, $q) {
    var deferred = $q.defer();
    $http.get('loadStoreItems.php').then( function (data) {
        deferred.resolve(data);
    });

    this.getParts = function () {
        return deferred.promise;
    };
}); 

现在我需要实现一个函数,该函数给出了由用户名输入的特定部件号,返回具有该部件号的特定项,以便我可以将其存储在用户已经采用的另一个部件阵列中。

我知道逻辑很容易,我可以很容易地在控制器中实现它,但我的(有限的)理解是应该避免控制器中的逻辑,所以我认为这应该作为服务实现。

我正在努力了解我将如何做到这一点,我一直在做一些研究,但仍然感到迷茫。我应该从哪里开始?

2 个答案:

答案 0 :(得分:0)

Angular服务是:

Lazily实例化 - Angular仅在应用程序组件依赖它时实例化服务。 单身人士 - 依赖于服务的每个组件都会获得对服务工厂生成的单个实例的引用。

它可能对你有帮助!!!

var app = angular.module("myApp", []);

    app.service('getDemoService', function($http) {
      this.getDemoResult = function() {
        return $http({
          method: 'GET',
          url: baseURL + 'Api/AccountPref/Get/' + uid
        });
      };
    });

    app.controller("MyDemoController", function($scope, getDemoService) {
      $scope.resultData = [];

      getDemoService.getDemoResult().then(function(data) {
        var items = data.items;
       //TODO: here your logic
      });
    });

答案 1 :(得分:0)

您可以使用partsService的另一种方法。例如:

this.getPartsByNumber = function(partNumber){
    return $http.get('loadStoreItems.php?partNumber=' + partNumber)
}

在控制器中你可以使用

partsService.getPartsByNumber(123).then(function(response){ 
    $scope.parts = response.data 
})