Nano Hash - криптовалюты, майнинг, программирование

ng-repeat в таблице с colspan и rowspan

Вот скрипт с нужной таблицей и функцией Javascript, содержащей массив, откуда я хочу заполнить таблицу, но я не понимаю, как, потому что, если я использую rowspan и colspan, мне нужно создать разные <tr> для каждого продукта...

Если есть другой способ получить нужную таблицу, я бы хотел узнать об этом... Главный вопрос здесь: как я могу использовать ng-repeat в таблице, которая использует rowspan и colspan?

Кроме того, значения colspan и rowspan в <thead> не могут быть статическими, как в jsfiddle, поскольку каждая строка может содержать разное количество продуктов... Итак, второй вопрос: как я могу динамически установить значение rowspan? они должны быть указаны в каждой строке таблицы.


Ответы:


1

Это возможно, если вы позволяете rowspan зависеть от inventory.length для текущей транзакции, а затем используете вложенные ng-repeat.

Вот так:

var myApp = angular.module('myApp', []);

function MainCtrl($scope) {
    var vm = $scope;
    vm.hello = 123;
    vm.transactions = [{
        id: 1,
        cost: 100,
        transaction_type: { id: 1, name: 'Sell' },
        client: { id: 2, name: 'XCLIENT' },
        inventory: [
            { id: 1, quantity: 4, product: { id: 1, name: 'Cup' }, product_condition: { id: 2, name: 'New' } },
            { id: 2, quantity: 10, product: { id: 2, name: 'Shirt' }, product_condition: { id: 2, name: 'New' } }
        ]
    }, {
        id: 2,
        cost: 40,
        transaction_type: { id: 2, name: 'Buy' },
        supplier: { id: 3, name: 'XSUPPLIER' },
        inventory: [
            { id: 1, quantity: 2, product: { id: 1, name: 'Cup' }, product_condition: { id: 2, name: 'New' } },
            { id: 2, quantity: 5, product: { id: 6, name: 'Pants' }, product_condition: { id: 2, name: 'New' } }
        ]
    }];
}
table,
th,
td {
  border: 1px solid black;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app>
  <table ng-controller="MainCtrl">
    <thead>
      <div>
        <tr>
          <td rowspan=2>Movement</td>
          <td colspan=3>Products</td>
          <td rowspan=2>Supplier</td>
          <td rowspan=2>Cost</td>
        </tr>
        <tr>
          <td>Name</td>
          <td>Quantity</td>
          <td>Condition</td>
        </tr>
      </div>
    </thead>
    <tbody ng-repeat="t in transactions">
      <tr>
        <td rowspan="{{t.inventory.length}}">Sell</td>
        <td>{{t.inventory[0].product.name}}</td>
        <td>{{t.inventory[0].quantity}}</td>
        <td>{{t.inventory[0].product_condition.name}}</td>
        <td rowspan="{{t.inventory.length}}">XCLIENT</td>
        <td rowspan="{{t.inventory.length}}">$100</td>
      </tr>
      <tr ng-repeat="item in t.inventory" ng-if="$index > 0">
        <td>{{item.product.name}}</td>
        <td>{{item.quantity}}</td>
        <td>{{item.product_condition.name}}</td>
      </tr>
    </tbody>
  </table>
</div>

(скрипт)

09.12.2015
  • С вашим ответом что-то не так, первый указанный товар статичен, это Кубок, 4, Новый... 09.12.2015
  • Спасибо!! Если бы вы знали, как собрать все это в одном <tr>, было бы здорово! Я имею в виду все transaction данные, включая продукты... 09.12.2015
  • Это невозможно, насколько я знаю. 09.12.2015
  • Я считаю, что вместо ng-if можно сделать ng-repeat="item in t.inventory.slice(1) 29.10.2019

  • 2

    Вот полностью динамический способ, включая динамический rowspan:

    HTML:

    <div ng-app>
      <h3>Here's what I want it to be</h3>
      <div ng-controller="MainCtrl">  
    
      <table >
        <thead>
          <tr>
            <td rowspan='{{rowspan}}'>Movement</td>
            <td colspan='{{rowspan}}'>Products</td>
            <td rowspan='{{rowspan}}'>Supplier</td>
            <td rowspan='{{rowspan}}'>Cost</td>
          </tr>
          <tr>
            <td>Name</td>
            <td>Quantity</td>
            <td>Condition</td>
          </tr>
        </thead>
        <tbody ng-repeat='t in transactions'>     
          <tr ng-init='invCustom=(t.invetory.splice(1))'>
            <td rowspan='{{rowspan}}'>{{t.transaction_type.name}}</td>
    
            <td>{{t.invetory[0].product.name}}</td>
            <td>{{t.invetory[0].quantity}}</td>
            <td>{{t.invetory[0].product_condition.name}}</td>
    
            <td ng-if='$index==0' rowspan='{{rowspan}}'>{{t.client.name}}</td>
            <td ng-if='$index==1' rowspan='{{rowspan}}'>{{t.supplier.name}}</td>
            <td rowspan='{{rowspan}}'>{{ t.cost | currency }}</td>
          </tr>
          <tr ng-repeat='tsub in invCustom'> 
            <td>{{tsub.product.name}}</td>
            <td>{{tsub.quantity}}</td>
            <td>{{tsub.product_condition.name}}</td>
          </tr>
        </tbody>  
      </table>
      </div>
        <h4>This data isn't loaded from the controller, I'd like to know how to use ng-repead in this case</h4>
    
    </div>
    

    JS:

    function MainCtrl($scope) {
     //var vm = this;
      $scope.rowspan = 3;
      $scope.transactions = [{
        id: 1,
        cost: 100,
        transaction_type: {
          id: 1,
          name: 'Sell'
        },
        client: {
          id: 2,
          name: 'XCLIENT'
        },
        invetory: [{
          id: 1,
          quantity: 4,
          product: {
            id: 1,
            name: 'Cup'
          },
          product_condition: {
            id: 2,
            name: 'New'
          }
        }, {
          id: 2,
          quantity: 10,
          product: {
            id: 2,
            name: 'Shirt'
          },
          product_condition: {
            id: 2,
            name: 'New'
          }
        },
         {
          id: 3,
          quantity: 101,
          product: {
            id: 3,
            name: 'Shirt_C'
          },
          product_condition: {
            id: 3,
            name: 'New_C'
          }
        }]
      }, {
        id: 2,
        cost: 40,
        transaction_type: {
          id: 2,
          name: 'Buy'
        },
        supplier: {
          id: 3,
          name: 'XSUPPLIER'
        },
        invetory: [{
          id: 1,
          quantity: 2,
          product: {
            id: 1,
            name: 'Cup'
          },
          product_condition: {
            id: 2,
            name: 'New'
          }
        }, {
          id: 2,
          quantity: 5,
          product: {
            id: 6,
            name: 'Pants'
          },
          product_condition: {
            id: 2,
            name: 'New'
          }
        },
                  {
          id: 3,
          quantity: 55,
          product: {
            id: 7,
            name: 'Pants_C'
          },
          product_condition: {
            id: 8,
            name: 'New_C'
          }
        }]
      }];
    }
    
    09.12.2015

    3

    попробуйте код ниже и не забудьте включить библиотеку angular JS....

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0-beta.2/angular.min.js
    "></script>
    <div ng-app>
      <h3>Here's what I want it to be</h3>
      <div ng-controller="MainCtrl">  
      <table >
        <thead>
          <tr>
            <td rowspan=2>Movement</td>
            <td colspan=3>Products</td>
            <td rowspan=2>Supplier</td>
            <td rowspan=2>Cost</td>
          </tr>
          <tr>
            <td>Name</td>
            <td>Quantity</td>
            <td>Condition</td>
          </tr>
        </thead>
        <tbody ng-repeat='t in transactions' ng-init='i=0'>     
          <tr>
            <td rowspan=2>{{t.transaction_type.name}}</td>
    
            <td>{{t.invetory[i].product.name}}</td>
            <td>{{t.invetory[i].quantity}}</td>
            <td>{{t.invetory[i].product_condition.name}}</td>
    
            <td ng-if='$index==0' rowspan=2>{{t.client.name}}</td>
            <td ng-if='$index==1' rowspan=2>{{t.supplier.name}}</td>
            <td rowspan=2>{{ t.cost | currency }}</td>
          </tr>
          <tr>        
             <td>{{t.invetory[i+1].product.name}}</td>
            <td>{{t.invetory[i+1].quantity}}</td>
            <td>{{t.invetory[i+1].product_condition.name}}</td> 
          </tr>
        </tbody>
    
      </table>
      </div>
        <h4>This data isn't loaded from the controller, I'd like to know how to use ng-repead in this case</h4>
    
    </div>
    
    09.12.2015
  • Это ограничивает диапазон строк только двумя продуктами, мне нужен динамический диапазон строк для каждой строки таблицы, вы не против сделать jsfiddle? 09.12.2015

  • 4

    Как я могу использовать ng-repeat в таблице, которая использует rowspan и colspan?

    Да, вы можете использовать, я приведу очень простой пример и не буду исправлять все за вас.

    <table>
        <tr ng-repeat="item in mylist">
            <td ng-if="someCondition2" rowspan="2">AAA</td>
            <td ng-if="someCondition1" colspan="2">BBB</td>
            <td ng-if="someCondition3">CCC</td>
        <tr>
    </table>
    

    Таким образом, вы можете условно добавить rowspan или colspan, где это необходимо, надеюсь, вы поняли идею.

    09.12.2015
  • Для меня не было бы проблемы, если бы был один <tr>, если бы вы могли помочь сделать таблицу похожей на jsfiddle и иметь ng-repeat только в одном <tr>, тогда ваш ответ был бы полезен 09.12.2015
  • Я думал поместить ng-repeat в тег <tbody>, но это плохая практика, но в основном моя проблема также связана со значениями colspan и rowspan в <thead>, они не могут быть статическими, они должны быть рассчитаны для каждой таблицы ряд... 09.12.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..