Добавьте указатель даты Jquery в один из столбцов, используя угловой тип данных JS - PullRequest
0 голосов
/ 11 января 2019

Я хочу показать некоторые данные в datatable, а в этих столбцах я хочу показать текстовое поле с Datepicker. Ниже мой угловой код JS в этом я хочу добавить свой datepicker.

var app = angular.module('MyApp', ['datatables']);
app.controller('homeCtrl', ['$scope', '$http', 'DTOptionsBuilder', 'DTColumnBuilder',
    function ($scope, $http, DTOptionsBuilder, DTColumnBuilder) {
        $scope.dtColumns = [
            DTColumnBuilder.newColumn("OBJECTID", "ID"),
            DTColumnBuilder.newColumn("SERVICE_CODE", "Service Code"),
            DTColumnBuilder.newColumn("COND1", "Condition 1"),
            DTColumnBuilder.newColumn("COND2", "Condition 2"),
            DTColumnBuilder.newColumn("COND3", "Condition 3"),
            DTColumnBuilder.newColumn("SERVICE_TYPE", "Service type"),
            DTColumnBuilder.newColumn("REMARK", "Remark"),
            DTColumnBuilder.newColumn("DATE", "date")
        ]
        $scope.dtOptions = DTOptionsBuilder.newOptions().withOption('ajax', {
            url: "/home/getdata",
            type: "POST"
        })
        .withPaginationType('full_numbers')
        .withDisplayLength(10);
    }])
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>

Итак, как я смогу добавить его ?? Пожалуйста, дайте мне знать, так как я новичок в Angular JS

обновление

Sample Data Img

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Вы должны использовать Angular Datatables «угловой путь», чтобы иметь возможность включать пользовательские директивы в ячейки таблицы. Взгляните на этот plunk с работающими Angular Datatables, используя «angular way» с пользовательской директивой dateQicker пользовательского интерфейса jQuery. Оттуда вы можете контролировать, где будет отображаться средство выбора даты, на основе условия, используя, например, ng-if.

Ссылка для угловой таблицы данных "Угловой путь": https://l -lin.github.io / angular-datatables / архивы / #! / AngularWay

0 голосов
/ 20 января 2019

Не эксперт в области данных JQuery, но провел какое-то исследование. Это не полная демонстрация, а своего рода первый шаг-учебник.

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

$scope.dtColumns = [
    ...,
    DTColumnBuilder.newColumn("DATE", "date").renderWith(renderTextBox);
]
...
function renderTextBox(data, type, full, meta) {
    return `<input value="${data}" ng-model="date${meta.row}" customdatepicker>`;
}

Здесь renderWith - это метод API DTColumnBuilder, который принимает четыре параметра. Наиболее важными из них являются data и meta - ваше текущее значение и метаинформация ячейки (она содержит row и column числовые свойства - координаты ячейки). ng-model помогает вам связать входное значение с вашим homeCtrl scope объектом. Я считаю, что вам нужен указатель даты в каждой строке, поэтому я связываю его значение с атрибутом, зависящим от индекса строки. Это означает, что в любое время вы можете получить выбранную дату в виде значения date0, введите homeCtrl scope (для строки с индексом 0). Кроме того, customdatepicker объясняется ниже.

Поскольку мы пытаемся связать указатель даты с элементом input, мы модифицируем DOM. В AngularJS лучше всего модифицировать DOM в директивах. Вот почему мы определяем нашу пользовательскую директиву. Давайте назовем это customdatepicker:

angular.module('MyApp').directive('customdatepicker', CustomDatepicker);
function CustomDatepicker() {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function (scope, element, attrs, ngModelCtrl) {
            $(element).datepicker({
                defaultDate: attrs.value,
                onSelect: function (date) {
                    scope[attrs.ngModel] = date;
                    scope.$apply();
                }
            });
        }
    };
}

Позвольте мне объяснить это. Мы используем директиву для изменения определенного элемента, поэтому мы ограничиваем его только атрибутом (restrict: 'A'). Для элемента требуется, чтобы для его изменения было определено ng-model, и здесь используется require: 'ngModel. Наконец, функция link выполняется, когда элемент input компилируется AngularJS. Требуется scope, для которого он скомпилирован, element, к которому он привязан, проанализированный attrs элемента и ngModelCtrl. Мы используем простую функцию JQuery-UI datepicker здесь. После выбора даты мы изменяем scope и вручную вызываем scope.$apply(), чтобы уведомить homeCtrl об scope изменении.

Наконец, ваш код может выглядеть так:

var app = angular.module('MyApp', ['datatables']);
app.directive('customdatepicker', function () {
    return {
      restrict: 'A',
      require: 'ngModel',
      link: function (scope, element, attrs, ngModelCtrl) {
          $(element).datepicker({
              defaultDate: attrs.value,
              onSelect: function (date) {
                  scope[attrs.ngModel] = date;
                  scope.$apply();
              }
          });
      }
    };
});
app.controller('homeCtrl', ['$scope', '$http', '$compile', 'DTOptionsBuilder', 'DTColumnBuilder',
    function ($scope, $http, $compile, DTOptionsBuilder, DTColumnBuilder) {
        $scope.dtColumns = [
            DTColumnBuilder.newColumn("OBJECTID", "ID"),
            DTColumnBuilder.newColumn("SERVICE_CODE", "Service Code"),
            DTColumnBuilder.newColumn("COND1", "Condition 1"),
            DTColumnBuilder.newColumn("COND2", "Condition 2"),
            DTColumnBuilder.newColumn("COND3", "Condition 3"),
            DTColumnBuilder.newColumn("SERVICE_TYPE", "Service type"),
            DTColumnBuilder.newColumn("REMARK", "Remark"),
            DTColumnBuilder.newColumn("DATE", "date").renderWith(renderTextBox)
        ]
        $scope.dtOptions = DTOptionsBuilder.newOptions().withOption('ajax', {
            url: "/home/getdata",
            type: "POST"
        })
        .withOption('createdRow', function(row) {
            $compile(angular.element(row).contents())($scope);
        })
        .withPaginationType('full_numbers')
        .withDisplayLength(10);

        function renderTextBox(data, type, full, meta) {
            return `<input value="${data}" ng-model="date${meta.row}" customdatepicker>`;
        }
    }]
);

Обратите внимание, что мы используем опцию createdRow и предоставляем обратный вызов, который запускается при создании строки. Здесь мы вручную скомпилируем элемент строки angularjs против homeCtrl $scope - что делает привязку работающей.

И не забудьте включить CDN JQuery-UI в свой проект после импорта JQuery.

0 голосов
/ 18 января 2019

Вместо jquery datepicker вы можете использовать угловой DatePicker, который настраивается и поддерживается для угловой версии js. Ниже приведена ссылка для набора даты angualr ui https://angular -ui.github.io / самозагрузки / #! # DatePicker Вы можете читать, делать и передавать ваши данные объекту date для углового выбора даты.

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