Accumulator only works on a single scope and variable

0

Trying to save in different variables, and show in different scope, a sum which depends on the symptom that the patient has, only saves and shows in a single scope and the same variable.

The code is as follows:

index.js

<div ng-controller="diagnosticos">

            <ul class="list-borderless">

                <div class="item item-divider">Sintomas principales</div>

                <li class="item item-toggle item-text-wrap">

                    Vive o procede de zonas endemicas

                    <label class="toggle toggle-dark">
                        <input type="checkbox" ng-model="principal.uno" ng-change="Sumatoria('uno')">
                        <div class="track">
                            <div class="handle"></div>
                        </div>
                    </label>

                </li>

                <li class="item item-toggle">

                    Fiebre

                    <label class="toggle toggle-dark">
                        <input type="checkbox" ng-model="principal.dos" ng-change="Sumatoria('dos')">
                        <div class="track">
                            <div class="handle"></div>
                        </div>
                    </label>

                </li>

            </ul>

            <ul class="list-borderless" ng-hide="Resultado < 2">

                <div class="item item-divider">Sintomas secundarios</div>

                <li class="item item-toggle">

                    Malestar general

                    <label class="toggle toggle-dark">
                        <input type="checkbox" ng-model="principal.tres" ng-change="Sumatoria('tres')">
                        <div class="track">
                            <div class="handle"></div>
                        </div>
                    </label>

                </li>

                <li class="item item-toggle">

                    Anorexia

                    <label class="toggle toggle-dark">
                        <input type="checkbox" ng-model="principal.cuatro" ng-change="Sumatoria('cuatro')">
                        <div class="track">
                            <div class="handle"></div>
                        </div>
                    </label>

                </li>

                <li class="item item-toggle">

                    Nauseas

                    <label class="toggle toggle-dark">
                        <input type="checkbox" ng-model="principal.cinco" ng-change="Sumatoria('cinco')">
                        <div class="track">
                            <div class="handle"></div>
                        </div>
                    </label>

                </li>

                <li class="item item-toggle item-text-wrap">

                    Dolor (Muscular, articular, cefalea, etc)

                    <label class="toggle toggle-dark">
                        <input type="checkbox" ng-model="principal.seis" ng-change="Sumatoria('seis')">
                        <div class="track">
                            <div class="handle"></div>
                        </div>
                    </label>

                </li>

                <li class="item item-toggle item-text-wrap">

                    Rash

                    <label class="toggle toggle-dark">
                        <input type="checkbox" ng-model="principal.siete" ng-change="Sumatoria('siete')">
                        <div class="track">
                            <div class="handle"></div>
                        </div>
                    </label>

                </li>

                <li class="item item-toggle item-text-wrap">

                    Leucopenia

                    <label class="toggle toggle-dark">
                        <input type="checkbox" ng-model="principal.ocho" ng-change="Sumatoria('ocho')">
                        <div class="track">
                            <div class="handle"></div>
                        </div>
                    </label>

                </li>

                <li class="item item-toggle item-text-wrap">

                    Prueba de torniquete positivo

                    <label class="toggle toggle-dark">
                        <input type="checkbox" ng-model="principal.nueve" ng-change="Sumatoria('nueve')">
                        <div class="track">
                            <div class="handle"></div>
                        </div>
                    </label>

                </li>

            </ul>






            <div class="list-borderless">
                <div class="item item-body">
                    <label>Diagnosticos elegidos</label>
                    <h3 class="title">Principales:{{Resultado}}</h3>
                    <h3 class="title">Secundarios:{{Respuesta}}</h3>
                </div>
            </div>

        </div>

Diagnostics_1.js

angular.module('saludApp', ['ionic'])
.controller('diagnosticos', diagnosticos);

diagnosticos.$inject = ['$scope'];

function diagnosticos($scope) {

var SumaDiag, SumaPrincipales, SumaSecundaria;

SumaDiag = 0;
SumaPrincipales = 0;
SumaSecundaria = 0;

$scope.Resultado = SumaDiag;
$scope.Respuesta = SumaDiag;

$scope.principal = {};

$scope.Sumatoria = function(key) {

    if ($scope.principal[key] === true) {

        if (key ? 'uno' : 'dos') {
            SumaPrincipales = SumaPrincipales + 1;
            console.log('La suma primaria' + " " + SumaPrincipales);
            $scope.Resultado = SumaPrincipales;
        } else {
            SumaSecundarios = SumaSecundarios + 1;
            console.log('La suma Secundaria' + " " + SumaSecundarios);
            $scope.Respuesta = SumaSecundaria;
        }

    } else {

        if (key ? 'uno' : 'dos') {
            SumaPrincipales = SumaPrincipales - 1;
            console.log('La resta primaria' + " " + SumaPrincipales);
            $scope.Resultado = SumaPrincipales;
        } else {
            SumaSecundarios = SumaSecundarios - 1;
            console.log('La resta secundaria' + " " + SumaSecundarios);
            $scope.Respuesta = SumaSecundaria;
        }

    };

}

}

In the following image, you see how three toggles of secondary symptoms are active, therefore the sum should be the secondary, and it should be shown through the corresponding scope, but this does not happen.

Thanks in advance for any help.

    
asked by Pedro Miguel Pimienta Morales 24.05.2016 в 00:12
source

1 answer

1

Your code can be greatly simplified if you continue to use the principle of dynamically using the $ scope properties. Since you divide the summations in principal and secundario you must also have the results divided in the same way. Reviewing, if you used to do

$scope[key] //.... operaciones

Now you can do

$scope[target][key] //.... operaciones

Which translates to the end in

$scope.principal.uno

You can apply the same for the results and have

$scope.resultados[target] -> $scope.resultados.principal // aqui almacenas las diferentes sumatorias separadas.

I leave you an example working. Check how small your controller is by typing the code in this way.

angular.module('saludApp', ['ionic'])
  .controller('diagnosticos', diagnosticos);

diagnosticos.$inject = ['$scope'];

function diagnosticos($scope) {

  $scope.principal = {};
  $scope.secundario = {};

  $scope.resultado = {
    principal: 0,
    secundario: 0
  };

  $scope.Sumatoria = function(target, key) {
    console.log(target, key);
    if ($scope[target][key] === true) {
      $scope.resultado[target] = $scope.resultado[target] + 1;
    } else {
      $scope.resultado[target] = $scope.resultado[target] - 1;
    }
  }
}
<script src="http://code.ionicframework.com/1.3.1/js/ionic.bundle.min.js"></script>
<link href="http://code.ionicframework.com/1.3.1/css/ionic.min.css" rel="stylesheet">
<div ng-app="saludApp" ng-controller="diagnosticos">
  <ul class="list-borderless">
    <div class="item item-divider">Sintomas principales</div>
    <li class="item item-toggle item-text-wrap">
      Vive o procede de zonas endemicas
      <label class="toggle toggle-dark">
        <input type="checkbox" ng-model="principal.uno" ng-change="Sumatoria('principal', 'uno')">
        <div class="track">
          <div class="handle"></div>
        </div>
      </label>
    </li>
    <li class="item item-toggle">
      Fiebre
      <label class="toggle toggle-dark">
        <input type="checkbox" ng-model="principal.dos" ng-change="Sumatoria('principal', 'dos')">
        <div class="track">
          <div class="handle"></div>
        </div>
      </label>
    </li>
  </ul>
  <ul class="list-borderless" ng-hide="Resultado < 2">
    <div class="item item-divider">Sintomas secundarios</div>
    <li class="item item-toggle">
      Malestar general
      <label class="toggle toggle-dark">
        <input type="checkbox" ng-model="secundario.uno" ng-change="Sumatoria('secundario', 'uno')">
        <div class="track">
          <div class="handle"></div>
        </div>
      </label>
    </li>
    <li class="item item-toggle">
      Anorexia
      <label class="toggle toggle-dark">
        <input type="checkbox" ng-model="secundario.dos" ng-change="Sumatoria('secundario', 'dos')">
        <div class="track">
          <div class="handle"></div>
        </div>
      </label>
    </li>
    <li class="item item-toggle">
      Nauseas
      <label class="toggle toggle-dark">
        <input type="checkbox" ng-model="secundario.tres" ng-change="Sumatoria('secundario', 'tres')">
        <div class="track">
          <div class="handle"></div>
        </div>
      </label>
    </li>
    <li class="item item-toggle item-text-wrap">
      Dolor (Muscular, articular, cefalea, etc)
      <label class="toggle toggle-dark">
        <input type="checkbox" ng-model="secundario.cuatro" ng-change="Sumatoria('secundario', 'cuatro')">
        <div class="track">
          <div class="handle"></div>
        </div>
      </label>
    </li>
    <li class="item item-toggle item-text-wrap">
      Rash
      <label class="toggle toggle-dark">
        <input type="checkbox" ng-model="secundario.cinco" ng-change="Sumatoria('secundario', 'cinco')">
        <div class="track">
          <div class="handle"></div>
        </div>
      </label>
    </li>
    <li class="item item-toggle item-text-wrap">
      Leucopenia
      <label class="toggle toggle-dark">
        <input type="checkbox" ng-model="secundario.seis" ng-change="Sumatoria('secundario', 'seis')">
        <div class="track">
          <div class="handle"></div>
        </div>
      </label>
    </li>
    <li class="item item-toggle item-text-wrap">
      Prueba de torniquete positivo
      <label class="toggle toggle-dark">
        <input type="checkbox" ng-model="secundario.siete" ng-change="Sumatoria('secundario', 'siete')">
        <div class="track">
          <div class="handle"></div>
        </div>
      </label>
    </li>
  </ul>
  <div class="list-borderless">
    <div class="item item-body">
      <label>Diagnosticos elegidos</label>
      <h3 class="title">Principales:{{resultado.principal}}</h3>
      <h3 class="title">Secundarios:{{resultado.secundario}}</h3>
    </div>
  </div>
</div>
    
answered by 24.05.2016 / 18:58
source