我正在学习如何在AngularJS服务中存储API调用响应数据。在我看到的所有示例中,人们都使用服务中的函数来获取或设置值。
app.factory('dataFactory', function() {
let dataFactory = {};
let info;
dataFactory.setInfo = function(value){
info = value;
}
dataFactory.getInfo = function(){
return info;
}
return dataFactory;
});
但是我意识到我可以在不使用任何功能的情况下获取和设置服务中变量的值。
app.factory('dataFactory', function() {
let dataFactory = {};
let dataFactory.info;
});
// Now I can get or set the value of this in my controller
app.controller('myCtrl', [dataFactory, function(dataFactory) {
dataFactory.info = "Value"; // setting the value
let test = dataFactory.info; // getting the value
}])
我想知道我的方法是否可能导致任何问题。是否认为这是一种不好的做法?如果是,为什么?
答案 0 :(得分:1)
对数据访问器(获取器和设置器)的偏好是直接暴露属性,而不是特定于AngularJS或JavaScript。通常是面向对象编程中的一种常见做法。
与直接访问属性相比,更喜欢使用getter和setter的主要原因之一是数据封装。当在服务功能(let info;
)的词法环境中将数据定义为局部变量时,将无法从外部(例如,从控制器)访问数据。
数据访问器还使您可以灵活地添加数据访问逻辑。例如,您可能希望在调用getter时执行一些检查,并决定是否返回数据。同样,在设置器中,您可以验证(与设置器一起调用的)数据是否符合要求,如果不满足,则会引发错误。
此外,您可能想查看this answer,以了解吸气剂和吸气剂可能提供的许多其他好处。