angularjs - angularjs服务中获取或设置数据时使用函数有什么意义?
问题描述
我正在学习如何在 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
}])
我想知道我的方法是否可能导致任何问题。这是否被认为是一种不好的做法,如果是这样,为什么?
解决方案
数据访问器(getter 和 setter)优先于直接暴露属性既不是 AngularJS 也不是 JavaScript 特有的。通常是面向对象编程中的一种常见做法。
与直接访问属性相比,更喜欢 getter 和 setter 的主要原因之一是数据封装。当数据在服务函数 ( ) 的词法环境中定义为局部变量时,let info;
无法从外部(例如从控制器)访问它。
数据访问器还使您可以灵活地添加数据访问逻辑。例如,您可能希望在调用 getter 时执行一些检查并决定是否返回数据。同样,在 setter 中,您可以验证数据(调用 setter 时)是否满足要求,如果不满足则抛出错误。
此外,您可能希望查看此答案以查看 getter 和 setter 可能提供的许多其他好处。
推荐阅读
- elasticsearch - 获取 Grok Debugger Kibana 的登录字段
- ios - 从另一个文件中的 SKScene 中删除 UIView
- internet-explorer - Microsoft Edge 在 IE 中打开 login.onmicrosoft.com 而不是访问页面
- elmah - 可以在 VSTS 版本中转换 ELMAH 主题吗?
- java - Vector not changing with "AES/CBC/pkcs7padding" in Java
- oracle - 为其他用户创建 FK 时 Oracle 表或视图不存在
- r - 如何在 ggplotly() 中使分组热图的列宽相同
- ios - 使用 AWS Comprehend iOS 的问题
- sql - 是否可以从单个字符创建一个字符串?
- python - 散点图 - 时间序列中 dx (dt) 的偏移点