我正在使用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文件中不在范围内的对象进行比较。
答案 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
然后检查这些值,而不是每次都写入字符串