角度提供者$得到怀疑

时间:2014-09-15 15:53:10

标签: angularjs provider

我对提供商有些怀疑。 有人可以解释一下为什么我无法从控制器访问“setText”提供程序功能吗? 我只能访问$ get块中的函数。

var myMod = angular.module('myApp', []);

myMod.controller("mainCtrl", [ "$scope","greeting", function($scope, greeting){
    greetingProvider.setText("Hi, ");
}]);

myMod.provider('greeting', function() {
  var text = 'Hello, ';

  this.setText = function(value) {
    text = value;
  };

  this.$get = function() {
    return function(name) {
      console.log(text + name);
    };
  };
});

myMod.config(function(greetingProvider) {
  greetingProvider.setText("Howdy there, ");
});

myMod.run(function(greeting) {
  greeting('Ford Prefect');
});

由于

2 个答案:

答案 0 :(得分:1)

setText功能仅在您的app.config上公开。当您访问控制器中的提供程序时,您唯一拥有的就是您在$ get函数中包含的内容。

有关更详细的答案,请查看以下文章:

http://tylermcginnis.com/angularjs-factory-vs-service-vs-provider/

答案 1 :(得分:0)

只有在应用程序生命周期的配置阶段才能访问提供程序。它们的具体目的是提供一种配置未来服务的方法,提供者应通过this.$get方法返回。

在你的情况下,它并不真的像你需要一个提供者,简单的服务(工厂)就足够了。或者您可以使用工厂并添加一个方法set来更改存储在闭包中的text变量。