Как отсортировать столбец с датами в таблице md-data с помощью атрибута md-order-by - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь разрешить упорядочить столбец md-data-table в AngularJS, который содержит даты.Эти даты являются строками в формате ДД / ММ / ГГГГ.Я не могу их правильно заказать.Я попытался вызвать функцию, которая возвращает отметку времени даты из атрибута md-order-by, но она даже не вызывает функцию.Текущий код следующий, а столбец, который я пытаюсь заказать, - Fecha Nacimiento:

 <table md-table md-row-select="options.rowSelection" multiple="{{options.multiSelect}}" ng-model="selected"
         md-progress="promise">
    <thead md-head md-order="query.order">
    <tr md-row>
      <th md-column md-order-by="id"><span>Identificador</span></th>
      <th md-column md-numeric md-order-by="fechaTimestamp(fechaNacimiento)"><span>Fecha Nacimiento</span></th>
      <th md-column md-order-by="sexo"><span>Sexo</span></th>
      <th md-column md-numeric md-order-by="altura"><span>Altura(cm)</span></th>
      <th md-column><span>Grabaciones</span></th>
      <th md-column><span>Atributos extra</span></th>
    </tr>
    </thead>
    <tbody md-body>
    <tr md-row md-select="paciente" md-on-select="logItem" md-auto-select="options.autoSelect"
        ng-repeat="paciente in pacientes.data | filter: filter.search | orderBy: query.order | limitTo: query.limit : (query.page -1) * query.limit">
      <td md-cell ng-click="editarCampo($event, paciente, 'identificador')"
          ng-class="{'md-placeholder': !paciente.id}">{{paciente.id || 'Añadir identificador'}}
      </td>
      <td md-cell ng-click="editarFecha($event, paciente)" ng-class="{'md-placeholder': !paciente.fechaNacimiento}">
        {{paciente.fechaNacimiento
        || "Añadir fecha nacimiento"}}
      </td>
      <td md-cell>
        <md-select ng-model="paciente.sexo" name="sexo" ng-change="editarSexo(paciente)" placeholder="Sexo" required>
          <md-option value="Hombre">Hombre</md-option>
          <md-option value="Mujer">Mujer</md-option>
          <md-option value="Otro">Otro</md-option>
        </md-select>
      </td>
      <td md-cell ng-click="editarCampo($event, paciente, 'altura')"
          ng-class="{'md-placeholder': !paciente.altura}">{{paciente.altura || 'Añadir altura'}}
      </td>
      <td md-cell>
        <md-button ng-click="redirect('grabaciones/' + paciente.id)"
                   style="background: lightgrey;" ng-show="paciente.grabaciones"
                   title="Ver grabaciones de {{paciente.id}}">Ver
        </md-button>
      </td>
      <td md-cell>
        <md-button ng-click="verAtributosExtra($event,paciente)" ng-show="paciente.extra"
                   style="background: lightgrey;"
                   title="Ver información extra de {{paciente.id}}">Ver
        </md-button>
        <md-button ng-click="verAtributosExtra($event,paciente)" ng-hide="paciente.extra"
                   style="background: lightgrey;"
                   title="Añadir atributos extra a {{paciente.id}}">Añadir
        </md-button>
      </td>
    </tr>
    </tbody>
  </table>

Заранее спасибо.

1 Ответ

0 голосов
/ 20 мая 2018

Вызов функции на md-order-by не работает.Итак, вам нужно изменить свойство date для pacients.data объектов.Вы говорите, что получаете его в виде строки ДД / ММ / ГГГГ, верно?Так что просто манипулируйте массивом pacients.data и измените свойство даты на объект со своими собственными свойствами в качестве значения & ts (отметка времени) в представлении, которое вы можете связать date.vale & в md-order-by, которое вы можете связать date.ts.

Для манипуляции я создал один пример с функцией:

$scope.addDateTimestamps = function() {
    var arrData = $scope.pacientes.data;
    var newData = arrData.map(function(item,index) {
        var dateString = item.date;
        var dateParts = dateString.split("/");
        var dateObject = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);
        item.date = {'value': dateString, 'ts': dateObject.getTime()};
        return item;
    });
    $scope.pacientes.data = newData;
}

Так что эта функция преобразует дату ДД / ММ / ГГГГ в объект даты и затем получает метку времени.Вызывайте эту функцию, когда вы получаете данные из сервиса и создаете модель.Вы можете следовать нижеприведенному коду, где я добавил поле даты со связыванием и сортировкой строковых значений на основе отметки времени.

В качестве альтернативы вы можете даже просто изменить свойство даты со строки объектов массива на отметку времени, а затем при просмотре вы можете использовать датуфильтр для отображения в разных форматах и ​​в порядке упорядочения по дате (ts)

Пример Codepen

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