我对提供商有些怀疑。 有人可以解释一下为什么我无法从控制器访问“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');
});
由于
答案 0 :(得分:1)
setText
功能仅在您的app.config上公开。当您访问控制器中的提供程序时,您唯一拥有的就是您在$ get函数中包含的内容。
有关更详细的答案,请查看以下文章:
http://tylermcginnis.com/angularjs-factory-vs-service-vs-provider/
答案 1 :(得分:0)
只有在应用程序生命周期的配置阶段才能访问提供程序。它们的具体目的是提供一种配置未来服务的方法,提供者应通过this.$get
方法返回。
在你的情况下,它并不真的像你需要一个提供者,简单的服务(工厂)就足够了。或者您可以使用工厂并添加一个方法set
来更改存储在闭包中的text
变量。