2016-07-12 6 views
0

I次のシナリオは、複数の入力を持つ一つの形とは、私はすべての入力を同じように計算しますが、コントローラの異なる分野 同じロジックを持つ複数の入力に対して1つのコントローラを使用するにはどうすればよいですか?

<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> 

に値を返す必要があります。

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

私がしたいですmod.forまたはmod.desの値を変更して、各入力にコントローラを記述する必要はありません。しかし、私は変更している入力からモデルの名前を渡す方法がありません

+0

'NG-変更= "findModifier()"' – batmaniac7

+0

のdidnを使用しない理由私はそれをすることができることを知っている、tks! Waldirのplnkrの答えは私に助けてくれました。 –

答えて

0

私は正確に何をしたいのか分かりませんが、コードを変更して機能させるようにしました。ここのコメントにあなたがしたいことを教えてください。私はあなたを助けることができます。

あなたのHTMLを変更:

<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> 

あなたのJSは変更:

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

私はあなたがこのような何かを期待していると思います。それはカスタムを上にヒットします

(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; } })(); 

以下の値が変更するたびに、あなたの入力に

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

をこのディレクティブを適用するようにあなたは私が期待し

を見るリンク機能を持つカスタムディレクティブを書くことができますこれは役に立ちます

+0

これは正しいものであり、指示と時計を使用する良い答えですが、私はWaldirの答えを選択しました。 –

関連する問題