2016-07-12 14 views
0

Ich habe folgendes Szenario, eine Form mit mehreren Eingängen und ich brauche jede Eingabe die gleiche Art und Weise zu berechnen, sondern die Werte in verschiedenen BereichenWie benutzt man einen Controller für mehrere Eingänge mit der gleichen Logik?

<div class="row"> 
     <input type="number" min="1" class="form-control" id="InputValorFOR" placeholder="" ng-change="findModifier()" ng-model="atrb.for"> 
     <p>{{mod.for}}</p> 
</div> 
<div class="row"> 
     <input type="number" min="1" class="form-control" id="InputValorDES" placeholder="" ng-change="findModifier()" ng-model="atrb.des"> 
     <p>{{mod.des}}</p> 
</div> 

die Steuerung zurück:

app.controller('atributosCtrl', function($scope){ 

findModifier = function() {   
    if ($scope.atrb > 1 && $scope.atrb <10) 
    { 
     if ($scope.atrb % 2 == 0) 
     { 
      $scope.mod = (($scope.atrb/2) - 5); 
     }   
    } 
};  
$scope.$watch('atrb', findModifier); }); 

Ich mag Ändern Sie den Wert von mod.for oder mod.des, ohne einen Controller für jede Eingabe schreiben zu müssen. aber ich nicht, wie man den Namen des Modells von der Eingabe überlasse, die ich bearbeite

+0

warum verwenden nicht 'ng-change = "findModifier ()"' – batmaniac7

+0

didn Ich weiß nicht, dass ich das tun könnte, tks! Waldirs Antwort mit dem PLNKR half mir zu verstehen, wie man dorthin kommt –

Antwort

0

Ich weiß nicht, was genau Sie wollen, aber ich habe einige Änderungen an Ihrem Code vorgenommen, damit es funktioniert. Bitte sagen Sie mir, was Sie in den Kommentaren hier wollen und ich kann Ihnen helfen.

Ihre HTML geändert:

<body ng-controller="atributosCtrl"> 
    <div class="row"> 
     <input type="number" min="1" class="form-control" id="InputValorFOR" placeholder="" ng-change="findModifier('for')" ng-model="atrb.for"> 
     <p>{{mod.for}}</p> 
    </div> 
    <div class="row"> 
     <input type="number" min="1" class="form-control" id="InputValorDES" placeholder="" ng-change="findModifier('des')" ng-model="atrb.des"> 
     <p>{{mod.des}}</p> 
    </div> 
    </body> 

Ihre JS geändert:

app.controller('atributosCtrl', function($scope){ 
    $scope.atrb = { 
    for: null, 
    des: null 
    }; 
    $scope.mod = { 
    for: null, 
    des: null 
    }; 

    $scope.findModifier = function(type) { 
    $scope.mod[type] = null; 
    if ($scope.atrb[type] > 1 && $scope.atrb[type] <10) 
    { 
     if ($scope.atrb[type] % 2 === 0) 
     { 
      $scope.mod[type] = (($scope.atrb[type]/2) - 5); 
     }   
    } 
    } 
}); 

Plunker: https://plnkr.co/edit/aCNJQyfYXZ5vU1rc381S

0

Ich denke, dass Sie etwas so erwarten. Sie können wie eine benutzerdefinierte Richtlinie mit einer Link-Funktion schreiben unter

(function() { 
    "use strict"; 
    angular.module("app").directive("notifypropertychanged", notifypropertychanged); 
    function notifypropertychanged() { 
     var directive = { 
      require: "ngModel", 
      link: function ($scope, element, attrs, ngModel) { 
       $scope.$watch(attrs["notifypropertychanged"], function (newVal, oldVal) { 

        var initialValue = attrs["oldvalue"]; 

       }); 
      } 
     }; 
     return directive; 
    } 
})(); 

Diese Richtlinie gilt für die Eingabe

<input type="number" min="1" class="form-control" notifypropertychanged="atrb.des" oldvalue=" {{::atrb.des}} " id="InputValorDES" placeholder="" ng-model="atrb.des"> 

, wenn der Wert, den es benutzerdefinierte Uhr treffen auf verändern wird

Ich hoffe, Das hilft

+0

das ist richtig und eine gute Antwort, um die Anweisung und die Uhr zu verwenden, aber ich wähle Waldirs Antwort, weil einfacher und direkter das Problem zu lösen war, tks –