【问题标题】:angular provider $get doubts角度提供者 $get 怀疑
【发布时间】:2014-09-15 15:53:09
【问题描述】:

我对提供商有一些疑问。 有人能解释一下为什么我不能从控制器访问“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');
});

谢谢

【问题讨论】:

    标签: angularjs provider


    【解决方案1】:

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

    如需更详细的答案,请查看这篇文章:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-07-14
        • 2023-03-03
        • 2018-02-28
        • 1970-01-01
        • 2018-08-08
        • 2016-02-16
        • 1970-01-01
        • 1970-01-01
        • 2022-11-24
        相关资源
        最近更新 更多