请参考 - http://jsfiddle.net/36qp9ekL/629/
我正在使用工厂方法,这样我就可以隐藏实现逻辑,私有(pvt)变量以及工厂所需的所有专业人员。
如果您运行代码并查看控制台,我可以查看pvtvar1和pvtvar2。我如何实际隐藏pvt变量,实现细节。
app.controller("mycontroller", function($scope, myfactory) {
console.log(myfactory);
});
如果你能说出工厂对服务的好处,那将会很有帮助。
答案 0 :(得分:2)
app.factory("myfactory", function() {
var pvtvar1= 3;
var pvtvar2 = 4;
return {
a:function(){
return pvtvar2 + pvtvar1;}
}
});
您在变量的相同范围内声明对象和函数。这就是他们被展示的原因。在这里,我声明了对象范围的函数。请查看此内容以获取更多详细信息http://toddmotto.com/mastering-the-module-pattern/
答案 1 :(得分:0)
如您所知,javascript中没有私有。您正在使用闭包来创建无法访问的变量和函数。这和你一样好。控制台可能会向您显示(取决于浏览器)通过闭包定义的属性,但重要的是,您的代码中无法访问这些属性。
服务对工厂的优势?您可以从js对象而不是函数创建可注入服务,以便创建继承功能的服务。由于注射模型在许多方面可以替代继承,但它仍然是一种选择,因此不是非常有用。
我专门写服务而不是工厂,但我在我的项目中使用打字稿(有私有;)