【问题标题】:Angular js - Hide private variables from factoriesAngular js - 隐藏工厂的私有变量
【发布时间】:2015-09-21 14:43:29
【问题描述】:

请参考 - http://jsfiddle.net/36qp9ekL/629/

我正在使用工厂方法,以便我可以隐藏实现逻辑、私有(pvt)变量以及工厂的所有优点。

如果您运行代码并查看控制台,我可以查看 pvtvar1 和 pvtvar2。我如何真正隐藏 pvt 变量、实现细节。

app.controller("mycontroller", function($scope, myfactory) {

console.log(myfactory);

});

如果您能说出工厂相对于服务的优势,那将会很有帮助。

【问题讨论】:

  • 你真的应该在你的问题中包含来自那个小提琴的相关代码。

标签: angularjs factory encapsulation


【解决方案1】:
app.factory("myfactory", function() {

  var pvtvar1= 3;
  var pvtvar2 = 4;
    return {
        a:function(){
        return pvtvar2 + pvtvar1;}
    }


});

您在变量的同一范围内声明对象和函数。这就是他们被展示的原因。在这里,我在对象的范围内声明了函数。更多详情请看这里http://toddmotto.com/mastering-the-module-pattern/

【讨论】:

    【解决方案2】:

    如您所知,javascript 中没有私有属性。您正在使用闭包来创建无法访问的变量和函数。这和你得到的一样好。控制台可能会显示(取决于浏览器)通过闭包定义的属性,但重要的是,这些属性无法在您的代码中访问。

    服务优于工厂?您可以从 js 对象而不是函数创建可注入服务,这样您就可以创建继承功能的服务。不是非常有用,因为可注入模型在许多方面都可以替代继承,但它仍然是一种选择。

    我专门编写服务而不是工厂,但我在我的项目中使用打字稿(它有私人;))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 2015-08-16
      • 2016-05-13
      • 2013-04-18
      相关资源
      最近更新 更多