Switch with Angularjs

Asked

Viewed 923 times

2

Good afternoon guys, next, I have a benefit column on a table, where the data is recorded like this: 1,2,4,8. So, each number of this corresponds to a benefit, I’m trying to return this data to my view. I’m trying this way:

var getBenefits = function(index) {

    var benefits;

    switch(index) {
      case 1: benefits = "Assistência Médica/Medicina em grupo"; break;
      case 2: benefits = "Assistência Odontológica" ;          break;
      case 3: benefits = "Auxílio Creche" ;                    break;
      case 4: benefits = "Carro fornecido pela Empresa" ;      break;
      case 5: benefits = "Celular fornecido pela Empresa" ;    break;
      case 6: benefits = "Cesta básica" ;                      break;
      case 7: benefits = "Combustível" ;                       break;
      case 8: benefits = "Convênio com farmácia" ;             break;
      case 9: benefits = "Curso de idiomas" ;                  break;
      case 10: benefits = "Estacionamento" ;                   break;
      case 11: benefits = "Estudo de faculdade" ;              break;
      case 12: benefits = "Estudo de pós-graduação / MBA" ;    break;
      case 13: benefits = "Participação nos lucros" ;          break;
      case 14: benefits = "Previdência privada" ;              break;
      case 15: benefits = "Restaurante na Empresa" ;           break;
      case 16: benefits = "Seguro de vida em grupo" ;          break;
      case 17: benefits = "Seguro saúde" ;                     break;
      case 18: benefits = "Tíquete-alimentação" ;              break;
      case 19: benefits = "Tíquete-refeição" ;                 break;
      case 20: benefits = "Transporte fornecido pela empresa"; break;
      case 21: benefits = "Vale-transporte" ;                  break;
      default: benefits = "Sem benefícios";                
    }

    return benefits;
};

$Scope.viewBenefits = Function( ex ){

var ss = ex.split(',');

for ( var i = 0; i < ss.length; i++ ) {

  return getBenefits( ss[i] );

};

}

This Scope VIEWBENEFITS that is on my view, but I can’t make it work, what’s wrong? Thanks in advance

  • Thiago, consider marking Ono’s reply below as accepted by clicking on the check mark on the left side of the text - thank you! :)

1 answer

1

Two amendments:

  • Refactoring its structure of switch for an object containing a key/value map; and
  • Implementation of a mapping function between the members of an array and the object satisfying the previously mentioned structure.

inserir a descrição da imagem aqui

var myApp = angular.module("myApp", [])
.controller("testController", function ($scope) {

    $scope.benefits = {
      "1":"Assistência Médica/Medicina em grupo",
      "2":"Assistência Odontológica",
      "3":"Auxílio Creche",
      "4":"Carro fornecido pela Empresa",
      "5":"Celular fornecido pela Empresa",
      "6":"Cesta básica",
      "7":"Combustível",
      "8":"Convênio com farmácia",
      "9":"Curso de idiomas",
      "10":"Estacionamento",
      "11":"Estudo de faculdade",
      "12":"Estudo de pós-graduação / MBA",
      "13":"Participação nos lucros",
      "14":"Previdência privada",
      "15":"Restaurante na Empresa",
      "16":"Seguro de vida em grupo",
      "17":"Seguro saúde",
      "18":"Tíquete-alimentação",
      "19":"Tíquete-refeição",
      "20":"Transporte fornecido pela empresa",
      "21":"Vale-transporte"
    };
    
    $scope.transformaLista = function(lista){
        if (!!!lista) return null;
        
        return lista
        .split(',')                // Transforma a string original em 
                                   //     um array de strings, quebrando por vírgula
        .map(function(idx){        // Para cada membro do array original,
            return $scope
                   .benefits[idx]; // Procura o valor correspondente
                                   //     no objeto benefits,
        });                        // Map acumula os resultados em um novo array.
    };
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

<body ng-app='myApp'>
    <div ng-controller="testController">
    <input type='text' ng-model='listaBeneficios' /><br/>
    {{listaBeneficios}}<br/>
    <pre>
        {{transformaLista(listaBeneficios) | json}}
    </pre>
    </div>
</body>

Browser other questions tagged

You are not signed in. Login or sign up in order to post.