如何从控制器调用服务方法?

时间:2015-09-22 13:11:17

标签: javascript angularjs

我有servicecontroller。如何在服务中定义一个可以由控制器调用的方法(传递一个值)?

以下不起作用:

angular.module('test').service('myService', function() {
    this.updateContent = function(selection) {
        alert(selection);
    };

    return {
        //required for some databinding
        model: [
             someProperty = null;
        ]
    };
});

angular.module('test').controller('testController', ['$scope', 'myService', function($scope, myService) {
    $scope.updateSelection = function() {
        myService.updateContent("test");
    }
}]);

4 个答案:

答案 0 :(得分:5)

您可以在return语句中包含该函数:

    return {
        //required for some databinding
        updateContent: this.updateContent,
        model: [
             someProperty = null
        ]
    };

答案 1 :(得分:0)

angular.module('test').service('myService', function() {
    var service = {};
    service.model = { prop : null }
    service.updateContent = function() {}; 

    return service;
});

答案 2 :(得分:0)

请将testService更改为myService

angular.module('test').controller('testController', ['$scope', 'myService', function($scope, myService) {
    $scope.updateSelection = function() {
        myService.updateContent("test");
    }
}]);

答案 3 :(得分:0)

在angularJS中,服务工厂之间存在一些差异。

当您使用服务时,您将获得传递给服务的功能实例,例如new something()

如果您使用工厂,您将获得传递给工厂的函数返回的值。

但是,所有角度服务都是单身人士。服务配方几乎与工厂配方相同,但是注入器使用new运算符而不是工厂函数调用构造函数。

使用服务

<强>控制器

(function(){

function Controller($scope, Service) {

  //update by passing 'toto'
  Service.update('toto');

  //Retrieve object model
  console.log(Service.model);

}

angular
.module('app', [])
.controller('ctrl', Controller);

})();

<强>服务

(function(){

  function Service() {

    var self = this;

    self.update = function(value){
      console.log(value);
    }

    self.model = {
      test: null
    };

  }

  angular
    .module('app')
    .service('Service', Service);

})();

使用工厂

<强>控制器

(function(){

function Controller($scope, Factory) {

  //update by passing 'toto'
  Factory.update('toto');

  //Retrieve object model
  console.log(Factory.model);

}

angular
.module('app', [])
.controller('ctrl', Controller);

})();

<强>工厂

(function(){

  function Factory(){

    function update(value){
      console.log(value);
    }

    return {
      update: update,
      model: {
        test: null
      }
    }

  }

  angular
    .module('app')
    .factory('Factory', Factory);

})();