2016-07-12 5 views
0

У меня есть следующий сценарий, одна форма с несколькими входами и мне нужно рассчитать каждый вход так же, но возвращать значения в различных областяхКак использовать один контроллер для нескольких входов с одинаковой логикой?

<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

почему бы не использовать 'нг-изменения = "findModifier ()"' – batmaniac7

+0

Бесполезными Я знаю, что могу это сделать, ткс! Ответ Вальдира с помощью 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

Это правильно и хороший ответ на использование директивы и часов, но я выбираю ответ Вальдира, потому что было проще и прямо для решения проблемы, tks –