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
21-Topaz I
June 17, 2022

so e.g. the code below :

$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;
}
 }
 }

could be transformed to some code like this:

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

switch (stepnr) {
case 1:
{
$scope.setWdgsVisibility("3DLabel-",1, 1,false);
$scope.setWdgsVisibility("3DLabel-",2, 3,true);
}
break;

case 2:
{
$scope.setWdgsVisibility("3DLabel-",1, 3,false);
$scope.setWdgsVisibility("3DLabel-",4, 4,true);
}
break;
case 3:
{
$scope.setWdgsVisibility("3DLabel-",1, 4,false);//set 1 ... 4 to false
$scope.setWdgsVisibility("3DLabel-",3, 3,true);//reset 3 as visible
$scope.setWdgsVisibility("3DLabel-",5, 5,true);// set 5 as visible
}
 }
 }

 

Ok in this example is such function is not so  sufficient and it will be more sufficient when you have a longer list of contiguous widgets - e.g. 3DLabel-1....3D_Label-20. But the function could be further enhancement where you can use a list (json containing all widget which should be set- also usable for any property name (here in the example : visibility)