Skip to main content
7-Bedrock
June 16, 2022
Solved

Alternate for if-else statement

  • June 16, 2022
  • 1 reply
  • 3089 views

Hi,

 

In an experience I've 20 3D labels visibility to control on each step(total steps 7). 

 

 
$scope.checkStep = function(){
        console.log($scope.app);
           if($scope.view.wdg["model-1"].currentStep == 1){
              $scope.app.view.Home.wdg["3DImage-1"].visible = true;
              $scope.app.view.Home.wdg["3DImage-2"].visible = true;
              $scope.app.view.Home.wdg["3DLabel-1"].visible = true;
              $scope.app.view.Home.wdg["3DLabel-2"].visible = false;
              $scope.app.view.Home.wdg["3DLabel-3"].visible = false;
              $scope.app.view.Home.wdg["3DLabel-4"].visible = false;
              $scope.app.view.Home.wdg["3DLabel-5"].visible = false;
              $scope.app.view.Home.wdg["3DLabel-6"].visible = false;
             
          }
          else {
              if ($scope.view.wdg["model-1"].currentStep == 2){
                  $scope.app.view.Home.wdg["3DImage-1"].visible = false;
                  $scope.app.view.Home.wdg["3DImage-2"].visible = false;
                  $scope.app.view.Home.wdg["3DLabel-1"].visible = false;
                  $scope.app.view.Home.wdg["3DLabel-2"].visible = true;
                  $scope.app.view.Home.wdg["3DLabel-3"].visible = false;
                  $scope.app.view.Home.wdg["3DLabel-4"].visible = true;
                  $scope.app.view.Home.wdg["3DLabel-5"].visible = false;
                  $scope.app.view.Home.wdg["3DLabel-6"].visible = false;
              }
              else {        
                  if ($scope.view.wdg["model-1"].currentStep == 3){
                      $scope.app.view.Home.wdg["3DImage-1"].visible = false;
                      $scope.app.view.Home.wdg["3DImage-2"].visible = false;
                      $scope.app.view.Home.wdg["3DLabel-1"].visible = false;
                      $scope.app.view.Home.wdg["3DLabel-2"].visible = false;
                      $scope.app.view.Home.wdg["3DLabel-3"].visible = true;
                      }
                  else {        
                      if ($scope.view.wdg["model-1"].currentStep == 4){
                          $scope.app.view.Home.wdg["3DImage-1"].visible = false;
                          $scope.app.view.Home.wdg["3DImage-2"].visible = false;
                          $scope.app.view.Home.wdg["3DLabel-1"].visible = false;
                          $scope.app.view.Home.wdg["3DLabel-2"].visible = false;
                          $scope.app.view.Home.wdg["3DLabel-3"].visible = false;
                        if ($scope.app.params.step == 4){
              $scope.app.params.step = 1;
          }
          else {
              $scope.app.params.step = $scope.app.params.step + 1;
              }    
                          }
                      }
                  }
              }
          }
 
Like the above code I've to do this for 20 3DLabels. Anyone please suggest any other way to achieve this, Rather than using IF-Else statements for all the steps.
 
Thanks
Best answer by Mohit_Kabra27

Hi @Karthik ,

 

So basically what i mean is, you can define a function like below:

 

$scope.hide = function(){
$scope.view.wdg['3DLabel-1']['visible'] = false;
$scope.view.wdg['3DLabel-2']['visible'] = false;
$scope.view.wdg['3DLabel-3']['visible'] = false;
$scope.view.wdg['3DLabel-4']['visible'] = false;
}

 

$scope.playStep = function () {
let stepnr = $scope.view.wdg['model-1']['currentStep']
switch (stepnr) {
case 1:
{
$scope.hide();
$scope.view.wdg['3DLabel-2'].visible=true;
$scope.view.wdg['3DLabel-3'].visible=true;
}
break;

case 2:
{
$scope.hide();
$scope.view.wdg['3DLabel-4'].visible=true;
}
break;

}}

 

MK_10166888_0-1655453343637.png

Let me know if this works for you 

 

Thanks 

BR,

Mohit

1 reply

5-Regular Member
June 16, 2022

Hi @Karthik ,

You can try using switch-case, you can refer this link for more details : https://www.w3schools.com/js/js_switch.asp 

 

BR,

Mohit

Karthik7-BedrockAuthor
7-Bedrock
June 17, 2022
Hi Mohit,
 
For that too I need to change visibility properties to true or false for all 20 labels in each case right?
 

$scope.setWidgetProp('model-1', 'currentStep', 'stepnr');
$scope.playStep = function (stepnr) {

switch (stepnr) {
case 1:
{
$scope.view.wdg['3DLabel-1'].visible=false;
$scope.view.wdg['3DLabel-2'].visible=true;
$scope.view.wdg['3DLabel-3'].visible=true;
}
break;

case 2:
{
$scope.view.wdg['3DLabel-1'].visible=false;
$scope.view.wdg['3DLabel-2'].visible=false;
$scope.view.wdg['3DLabel-3'].visible=false;
$scope.view.wdg['3DLabel-4'].visible=true;
}
break;
case 3:
{
$scope.view.wdg['3DLabel-1'].visible=false;
$scope.view.wdg['3DLabel-2'].visible=false;
$scope.view.wdg['3DLabel-3'].visible=true;
$scope.view.wdg['3DLabel-4'].visible=false;
$scope.view.wdg['3DLabel-5'].visible=true;
}
 }
  }

 
 
Regards
Karthik
5-Regular Member
June 17, 2022

Hi @Karthik ,

In that case, you can define a function in which you set the visibility of all 20 labels as false for once, and then in each case instead of setting the visibility to false for each label you can simply call the above function, and then only set the visibility true for the required ones in each scenario .

This way you won't need to set the visibility every time for all the 20 labels

 

I hope this will help, let me know your reviews 

 

BR,

Mohit