Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在angularjs服务中获取或设置数据时使用函数的意义是什么?_Angularjs_Angularjs Service - Fatal编程技术网

在angularjs服务中获取或设置数据时使用函数的意义是什么?

在angularjs服务中获取或设置数据时使用函数的意义是什么?,angularjs,angularjs-service,Angularjs,Angularjs Service,我正在学习如何在AngularJS服务中存储API调用响应数据。在我看到的所有示例中,人们使用服务中的函数来获取或设置值 app.factory('dataFactory', function() { let dataFactory = {}; let info; dataFactory.setInfo = function(value){ info = value; } dataFactory.getInfo = function()

我正在学习如何在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,因为它们更容易通过日志、保护、断点、堆栈跟踪等进行调试