Setter在角度提供者中起作用

时间:2014-01-21 23:43:01

标签: javascript angularjs angularjs-service

根据我的理解,工厂是对Angular的提供程序的抽象,它允许您使用较少的代码行返回数据。但是,提供商提供了更大的灵活性,您可以更好地定义服务的功能。我仍然对如何从提供者调用简单函数感到困惑。每个人似乎都采取不同的方式,我不能让我的工作:

myApp.provider('myProvider', function() {
    myVar = true;

    $get: function() {
        return {
            myVar: myVar,
        }
    },

    toggleFalse = function() {
        myVar = false;
    },
})

myApp.controller('myController', function($scope, myProvider) {
    myProvider.toggleFalse();
});

这似乎不起作用 - 我一般都无法理解服务。它说toggleFalse没有定义。如何在可通过控制器控制的Angular服务上正确定义setter函数?

2 个答案:

答案 0 :(得分:0)

如果您执行console.dir(myProvider),则会看到您从$get获得了返回的对象。您需要将函数放在返回的对象上:

$get: function() {
    return {
        myVar: myVar,
        toggleFalse: function() {
            myVar = false;
        },           
    }
},

答案 1 :(得分:0)

这是一个简单的关闭问题。

如果您希望每个实例都具有唯一的所有内容,请将所有内容存储在$get

如果您希望对象的大部分是唯一的,但是有一些方法或对象/数组,每个实例彼此共享,那么在$get之外的函数闭包中定义它们并将它们附加到对象从 $get返回

... ("myProvider", function () {
  var sharedValue = 19,
      sharedFunction = function () {
          sharedValue += 1;
          return shared value;
      };


  return {
      $get : function () {
          return {
              unique : 1,
              shared : sharedFunction
          };
      }
  };

这不是一个Angular问题,而是一个JS的行为的核心部分,恰好在Angular范例内。