对带有多个参数的Switch cases/If语句进行排序,这是Javascript的新功能
好的,这是一种特殊的情况,所以我很难找到类似的问题 我使用Angular和链接到Firebase后端来尝试返回真值或假值。在Firebase下载对象的变量对带有多个参数的Switch cases/If语句进行排序,这是Javascript的新功能,javascript,angularjs,if-statement,javascript-objects,Javascript,Angularjs,If Statement,Javascript Objects,好的,这是一种特殊的情况,所以我很难找到类似的问题 我使用Angular和链接到Firebase后端来尝试返回真值或假值。在Firebase下载对象的变量ref的相应属性{yesterdayAm:false,yesterdayPm:false,todayAm:false,todayPm:false}下,我很难理解一组4个true或false值。当我简单地运行它时,我得到了正确且可预测的调用,我真的很愚蠢,因为我不理解if或开关的表达式/Javascript方面。帮助我返回正确的值 我将从视图开始
ref
的相应属性{yesterdayAm:false,yesterdayPm:false,todayAm:false,todayPm:false}
下,我很难理解一组4个true或false值。当我简单地运行它时,我得到了正确且可预测的调用,我真的很愚蠢,因为我不理解if
或开关的表达式/Javascript方面。帮助我返回正确的值
我将从视图开始:
<div class="col-xs-6 ">
<div class="dexbowl"><img ng-src="{{ isFed('yesterdayAm') }}"/></div>
</div>
<div class="col-xs-6">
<div class="dexbowl"><img ng-src="{{ isFed('yesterdayPm') }}"/></div>
</div>
<div class="col-xs-5 col-xs-offset-1">
<div class="dexbowl"><img ng-click="feed('todayAm')" ng-src="{{ isFed('todayAm') }}"/></div>
</div>
<div class="col-xs-5">
<div class="dexbowl"><img ng-click="feed('todayPm')" ng-src="{{ isFed('todayPm') }}"/></div>
</div>
它们通过$scope
中的此函数返回:
var blueFilled = 'images/dexterbluefilled.svg';
var satBlueFilled = 'images/SATdexterbluefilled.svg'; /* not used yet */
var blueEmpty = 'images/dexterblueempty.svg';
var satBlueEmpty = 'images/SATdexterblueempty.svg'; /*not used yet */
if (Fed.getInitState(when)) {
return blueFilled;
} else {
return blueEmpty;
};
您可能会问,在todayAm/todayPm/yesterdayAm/yesterdayPm
参数中传递的Fed.getInitState(when)
函数是什么。你说得对Fed
是从Firebase加载的服务
(或工厂),如下所示:
getInitState: function(when) {
var value = ref[when];
return value;
/* value to equal "true" or "false", depending on server state of todayAm, todayPm, yesterdayAm, yesterdayPm */
},
$scope.isFed = function(when) {
switch (Fed.getInitState(when)) {
case 1:
return blueFilled;
case 2:
return blueEmpty;
case 3:
return satBlueFilled;
case 4:
return satBlueEmpty;
}
};
同样,ref
对象是:
{yesterdayAm:false,yesterdayPm:false,todayAm:false,todayPm:false}
现在来看问题:
使用上面的if
函数返回视图的var-blueEmpty
和var-blueFilled
图像路径,所有内容都可以返回视图。一切正常。我一辈子都不知道如何实现另外两个映像路径:var-satbluempty
和var-satBlueFilled
我试图仅将2个“sat
”图像路径返回到2个属性的视图:yesterdayAm
和yesterdayPm
。我一直在尝试使用$scope
if
语句将blueEmpty
和blueFilled
导入到todayAm
,todayPm
,并将sat
图像路径变量导入到yesterdayAm
,yesterdayPm
属性
我曾尝试使用switch
和嵌套的if
语句来返回正确的值(true/false),但我觉得自己真的很笨,一辈子都无法解决这个问题
我对Javascript和Angular有点陌生,这是我第一次尝试完整完成的完整应用程序。我认为这里的方向是从Fed
服务中输入正确的值。有人能帮我解决这个问题吗?我卡住了
*编辑
我认为这个嵌套的if
函数可能会工作,但没有用:
$scope.isFed = function(when, which) {}
if (Fed.getInitState(when)) {
if (which === sat) {
return satBlueFilled;
} else {
return blueFilled;
} else {
if (which === notSat);
return satBlueFilled;
} else {
return satBlueEmpty;
}
}
};
*编辑2
按照@Steve Lang的建议,我正在Fed.getInitState
中创建一个switch语句,以向控制器函数$scope.isFed
返回值1
、2
、3
或4
。到目前为止,我有以下几点:
getInitState: function(when) {
var trueOrFalse = ref[when];
console.log('when: ' + when + ' ' + 'value: ' + value);
switch (trueOrFalse) {
case 'todayAm':
return 1;
case 'todayPm':
return 2;
case 'yesterdayAm':
return 3;
case 'yesterdayPm':
return 4;
}
},
我是否可以将&
运算符添加到案例中,以控制何时等于哪个值?似乎我需要一个嵌套在开关中的if
语句…Fed.getInitState()
应该能够返回大于true或false的值。假设Fed.getInitState()
返回一个介于1到4之间的值,那么您可以指定如下:
getInitState: function(when) {
var value = ref[when];
return value;
/* value to equal "true" or "false", depending on server state of todayAm, todayPm, yesterdayAm, yesterdayPm */
},
$scope.isFed = function(when) {
switch (Fed.getInitState(when)) {
case 1:
return blueFilled;
case 2:
return blueEmpty;
case 3:
return satBlueFilled;
case 4:
return satBlueEmpty;
}
};
根据评论进行更新
您可以按原样使用getInitState():
getInitState: function(when) {
var value = ref[when];
return value;
}
但是ref对象应该是这样的:
{yesterdayAm: 1, yesterdayPm: 2, todayAm: 3, todayPm: 4}
在这个问题上,我没有看到任何与Firebase或AngularFire的联系。上面的视图使用ng src和ng click指令。数据来自Firebase。Fed.getInitState()
是否还需要一个开关
函数来返回1到4?将开关与服务Fed
放置在控制器中有什么区别?