2016-11-15 6 views
0

У меня есть таблица generetad с помощью PHP, а и обрабатываются AngularJS:AngularJS - Директива по строкам в таблице

<table> 
    <tr> 
    <th>Col 1</th> 
    <th>Col 2</th> 
    <th>Col 3</th> 
    </tr> 


    <?php 
     while(...){ 
    ?> 
     <tr> 
      <td> 
      <input type="text" ng-model="calcolo.ore"> 
      </td> 
      <td> 
      <input type="text" ng-model="calcolo.ricavo"> 
      </td> 
      <td> 
      <input type="text" ng-model="calcolo.abbatt"> 
      </td> 
      <td> 
      <input type='text' ng-show="calcolo.abbatt" value='{{netti() | currency:"&euro;"}}'> 
      </td> 

     </tr> 

    <?php } ?> 

angular.module("myApp", ['ng-currency']) 
    .controller("userController", 
     function($scope) { 

      $scope.fattlord = function() { 
       return ($scope.calcolo.ore * $scope.calcolo.ricavo) 
      }; 


      $scope.netti = function() { 
       return ($scope.calcolo.ricavo-(($scope.calcolo.abbatt * $scope.calcolo.ricavo)/100)) 
      }; 


     }); 

Конечно, когда я пишу в ввод текста, все входы с той же ng-моделью получают одинаковое значение.

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

Извините за плохой английский и благодарю вас!

PS: Я не могу использовать ng-repeat.

+0

Вы должны создать Директиву ([Документация] (https://docs.angularjs.org/guide/directive)) – gianlucatursi

+0

Или определить контроллер для каждого . Тогда каждый tr будет иметь другую область – yBrodsky

+0

«все входы с той же ng-моделью получают одно и то же значение» -> это то, что должно было случиться. Кстати, в вашем коде ng-model все разные. Можете ли вы уточнить, какое поведение вы хотите достичь? – elfan

ответ

0

Как отметил @yBrodsky в комментарии, используйте контроллер на каждом <tr>, так что у вас может быть разный объем для каждого <tr>.

<script data-require="[email protected]*" data-semver="1.5.2" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.2/angular.js"</script> 
<body data-ng-app="myApp"> 
<table> 
    <tr> 
     <th>Col 1</th> 
     <th>Col 2</th> 
     <th>Col 3</th> 
    </tr> 
    <?php 
     $i = 0; 
     while($i++ < 5){ 
    ?> 
    <tr data-ng-controller="userController"> 
     <td> 
      <input type="text" ng-model="calcolo.ore"> 
     </td> 
     <td> 
      <input type="text" ng-model="calcolo.ricavo"> 
     </td> 
     <td> 
      <input type="text" ng-model="calcolo.abbatt"> 
     </td> 
     <td> 
      <input type='text' ng-show="calcolo.abbatt" value='{{netti() | currency:"&euro;"}}'> 
     </td> 
    </tr> 
    <?php } ?> 
</table> 
<script> 
    angular.module("myApp", []) 
    .controller("userController", 
     function($scope) { 
      $scope.calcolo = {}; //init 

      $scope.fattlord = function() { 
       return ($scope.calcolo.ore * $scope.calcolo.ricavo) 
      }; 
      $scope.netti = function() { 
       return ($scope.calcolo.ricavo-(($scope.calcolo.abbatt * $scope.calcolo.ricavo)/100)) 
      }; 
     } 
     ); 
</script> 
</body> 
0

Вы можете использовать массив для calcolo и увеличения индекса для каждой строки в PHP: ng-model="calcolo[0].abbatt", ng-model="calcolo[1].abbatt" и т.д.

Тогда в вашем контроллере вы можете перебираем массив Calcolo.