Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.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
对带有多个参数的Switch cases/If语句进行排序,这是Javascript的新功能_Javascript_Angularjs_If Statement_Javascript Objects - Fatal编程技术网

对带有多个参数的Switch cases/If语句进行排序,这是Javascript的新功能

对带有多个参数的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方面。帮助我返回正确的值 我将从视图开始

好的,这是一种特殊的情况,所以我很难找到类似的问题

我使用Angular和链接到Firebase后端来尝试返回真值或假值。在Firebase下载对象的变量
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
放置在控制器中有什么区别?