首页 > 解决方案 > 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
}])

我想知道我的方法是否可能导致任何问题。这是否被认为是一种不好的做法,如果是这样,为什么?

标签: angularjsangularjs-service

解决方案


数据访问器(getter 和 setter)优先于直接暴露属性既不是 AngularJS 也不是 JavaScript 特有的。通常是面向对象编程中的一种常见做法。

与直接访问属性相比,更喜欢 getter 和 setter 的主要原因之一是数据封装。当数据在服务函数 ( ) 的词法环境中定义为局部变量时,let info;无法从外部(例如从控制器)访问它。

数据访问器还使您可以灵活地添加数据访问逻辑。例如,您可能希望在调用 getter 时执行一些检查并决定是否返回数据。同样,在 setter 中,您可以验证数据(调用 setter 时)是否满足要求,如果不满足则抛出错误。

此外,您可能希望查看此答案以查看 getter 和 setter 可能提供的许多其他好处。


推荐阅读