如何将内容从服务传递到另一个服务,在该服务中,该内容发生了什么,然后传递给控制器​​?

时间:2015-08-28 19:48:59

标签: javascript angularjs promise angular-promise angular-services

我正在成功解析服务中的内容并将该承诺传递给另一个服务。我希望能够对该promise的已解析值执行某些操作,然后以可以从注入该服务的控制器引用它的方式存储它。

我不太确定如何实现这一目标。这是我的尝试:

angular.module('test').service("service1", function($q) {
          function doSomething(something) {    
               //parses some data
               return deferred.promise;
           }
      }

      return {
          function1: function1
      }
});

 angular.module('test').service("service2", ['service1', function(service1) {
     function function1() {
         service1.doSomething("test").then(function (result) {
             var alteredResult = result + "Altered"; //I need to store this value so I can reference it from controllers that are injected with this service
         });
         return alteredResult;
     }
 }]);


angular.module('test').controller('testController', ['$scope', 'service2', function ($scope, service2) {

      $scope.test = service2.function1();

}]);

我能够成功地将原始承诺从服务传递到服务到控制器传递承诺并在控制器中执行.then以及我的更改,但我想将此逻辑保留在{{1} }。我希望能够将此值存储在service2中,以便在将其注入多个控制器时可以访问它。

如何将更改的内容存储在我的第二个服务中?我需要创建新的承诺吗?

非常感谢你的时间。如果您需要我提供任何其他信息或者我不清楚,请告诉我。

Here is a previous post有人帮助我成功地将承诺从服务传递到服务到控制器,以便可以从控制器访问和更改它可能有用。

1 个答案:

答案 0 :(得分:0)

如果要与多个控制器共享相同的值,可以将更改后的值存储在 service2 中的对象中,并将其公开给控制器。

angular.module('test').service("service2", ['service1',
  function(service1) {
    // we're exposing an object with a null property
    var myResult = {
      alteredResult: null
    };

    function function1() {
      service1.doSomething("test").then(function(result) {
        // set the alteredResult property to the actual result
        myResult.alteredResult = result + "Altered";
      });

    }

    return {
      function1: function1,
      myResult: myResult
    };
  }
]);

在控制器中,您可以:

angular.module('test').controller('testController', ['$scope', 'service2',
  function($scope, service2) {

    // get a reference the server's exposed object, it's alteredResult property will be filled in later.
    $scope.myservice2Result = service2.myResult;
    $scope.test = service2.function1();


  }
]);

如果您需要仅将 service2 中的通话结果返回给来电者,则可以创建新的承诺。