将参数传递给工厂

时间:2014-11-13 10:22:18

标签: angularjs

我正在使用AngularJs构建应用程序。

我有一个函数(createStarMarkup),它根据数字返回一堆HTML。

function(rating) {
  var rating = Number(rating);

  var markup = "";

  //Do some stuff

  return markup;
}

我希望能够在我的应用程序中多个位置使用此功能,因此我将其定义为Utility模块中的服务。

var app = angular.module('utilities', []);

app.factory('createStarMarkup', function(rating) {
  var rating = Number(rating);

  var markup = "";

  // Do some stuff

  return markup;
});

然后我添加'实用程序' module作为我的其他模块的依赖项,并将服务注入控制器。

var app = angular.module('reviews', ['ionic', 'utilities']);

app.controller('reviewController',
  ['$scope', '$ionicActionSheet', 'createStarMarkup', function($scope, $ionicActionSheet, createStarMarkup){...});

这会产生以下错误

Error: [$injector:unpr] Unknown provider: $ratingProvider <- $rating <- createStarMarkup

如果我删除createStarMarkup函数中的rating参数,则错误消失。我使用工厂是在正确的轨道上还是我应该研究其他东西?

2 个答案:

答案 0 :(得分:3)

您的工厂定义无效。请按以下方式更改

app.factory('createStartupServices', ['',  function() {
    return {
      getMarkup: function(rating) {
        var rating = Number(rating);

        var markup = "";

         // Do some stuff

          return markup;
      },
    }
  }
]);

您的控制器需要按以下方式获取方法getMarkup

var app = angular.module('reviews', ['ionic', 'utilities']);

app.controller('reviewController',['$scope', '$ionicActionSheet', 'createStartupServices', function($scope, $ionicActionSheet, createStartupServices){
    //createStartupServices.getMarkup(123);
});

答案 1 :(得分:1)

问题在于:

app.factory('createStarMarkup', function(rating) {

您正在尝试注入一个名为rating的服务,该服务不存在。

你想要做的是:

app.factory('createStarMarkup', function() {
 Service = {};
 Service.myFunction = function(rating) {
  var rating = Number(rating);

  var markup = "";

  // Do some stuff

  return markup;
  }
return Service;
});

通过这种方式,您可以在任何控制器/指令/服务中注入createStarMarkup并使用如下函数:

createStarMarkup.myFunction(rating);