在Javascript中存储对象的当前状态的最佳做法是什么?

时间:2015-01-23 21:53:46

标签: javascript ajax angularjs

我正在使用AngularJS应用程序编写一个javascript,该应用程序经常处理来自Web服务的数据下载,并带有加载和错误消息。

起初我用过

$scope.myObj = {};
$scope.myObjReady = true|false;
$scope.myObjLoading = true|false;
$scope.myObjError = true|false;

因此我可以在回调中为对象的状态设置正确的值,并且由于角度的双向绑定,UI会自动刷新,但后来我采用了更有条理的方式

$scope.myObj = {
    data: {},
    ready: true|false,
    loading: true|false,
    error: true|false,
    errorMessage: ""
}

我意识到,由于对象不能同时出错并加载,我应该采用不同的方法,例如

$scope.myObj.state = "";
...
$scope.myObj.state = "loading"|"ready"|"error";

但是这种方法尽管更快地设置状态(在将此设置为true之前需要将所有其他设置为false)处理写字符串,我觉得这非常业余。

在这种情况下你会用什么?

编辑: 考虑到AngularJS框架,我无法与HTML UI文件中不在范围内的对象进行比较。

3 个答案:

答案 0 :(得分:2)

在Javascript中,您可以将对象假装为枚举:

var STATE = {
    LOADING: 0,
    READY: 1,
    ERROR: 2
};

然后致电

$scope.myObj.state = STATE.LOADING;

state变量将包含1。不需要任何字符串。

可以在此博客文章中找到一些扩展信息:https://stijndewitt.wordpress.com/2014/01/26/enums-in-javascript/

答案 1 :(得分:2)

在Javascript中你可以制作像这样的枚举

var StateEnum = Object.freeze({"LOADING":1, "READY":2, "ERROR":3});
$scope.state=StateEnum.READY; 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze保护它

答案 2 :(得分:0)

为您的案例定义枚举。即

$scope.myObj.enums.LOADING_STATE_LOADING = 1
$scope.myObj.enums.LOADING_STATE_READY = 2
$scope.myObj.enums.LOADING_STATE_ERROR = 3

然后检查这些值,而不是每次都写入字符串