在 angularjs 服务中获取或设置数据时使用函数有什么意义?
What is the significance of using functions when getting or setting data in angularjs service?
我正在学习如何在 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
}])
我想知道我的方法是否会导致任何问题。它被认为是一种不好的做法吗?如果是,为什么?
优先于数据访问器(getters 和 setters)直接公开 属性 既不特定于 AngularJS 也不特定于 JavaScript。通常是面向对象编程中的常见做法。
比直接访问 属性 更喜欢 getters 和 setters 的主要原因之一是数据封装。当数据在服务函数 (let info;
) 的词法环境中被定义为局部变量时,不可能从外部访问它(例如从控制器)。
数据访问器还使您可以灵活地添加数据访问逻辑。例如,您可能希望在调用 getter 时执行一些检查,并决定是否 return 数据。同样,在 setter 中,您可以验证数据(调用 setter 时使用的数据)是否满足要求,如果不满足则抛出错误。
此外,您可能需要查看 this answer 以查看 getter 和 setter 可能提供的许多其他好处。
我正在学习如何在 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
}])
我想知道我的方法是否会导致任何问题。它被认为是一种不好的做法吗?如果是,为什么?
优先于数据访问器(getters 和 setters)直接公开 属性 既不特定于 AngularJS 也不特定于 JavaScript。通常是面向对象编程中的常见做法。
比直接访问 属性 更喜欢 getters 和 setters 的主要原因之一是数据封装。当数据在服务函数 (let info;
) 的词法环境中被定义为局部变量时,不可能从外部访问它(例如从控制器)。
数据访问器还使您可以灵活地添加数据访问逻辑。例如,您可能希望在调用 getter 时执行一些检查,并决定是否 return 数据。同样,在 setter 中,您可以验证数据(调用 setter 时使用的数据)是否满足要求,如果不满足则抛出错误。
此外,您可能需要查看 this answer 以查看 getter 和 setter 可能提供的许多其他好处。