3

Я хочу, чтобы указать цвет Угловой даты UI клеток, путем добавления цвета для ячеек, так что я переопределить шаблон по умолчанию с чем-то вроде этого:Угловой UI Bootstrap Datepicker - добавить пользовательскую функцию шаблон

<!-- things from pasted default template, here I change something --> 
<!-- btn-danger instead btn-info for clicked date, test if I can change anything--> 
<!-- call to function from my own controller--> 
<button type="button" style="width:100%;" class="btn btn-default btn-sm" 
    ng-class="{'btn-danger': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" 
    ng-disabled="dt.disabled" tabindex="-1"> 
    <span ng-class="{'text-muted': dt.secondary, 'text-info': dt.current, 
    'text-success': hasEventsCreatedByUser(dt)}"> 
    {{dt.label}}</span> 
</button> 

И это функция (в данный момент) в моем testController

$scope.hasEventsCreatedByUser = function(date){ 
      return true; 
}; 

изменения от btn-info к btn-danger было довольно легко, это только вставить еще один класс :) Но я не могу вызвать метод из моего контроллера здесь - есть ли решение, позволяющие призывающая п unction от моих контроллеров в шаблоне Углового UI или мне нужно переопределить каким-то образом по умолчанию DatepickerController?

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

Mock решения найдено:

Я использую «микроконтроллер», который я добавляю только на кнопке:

<button ng-controller="miniController" type="button" style="width:100%;" class="btn btn-default btn-sm" ..... 

Но я знаю, что это всего лишь макет, а не решение. Если у кого-то есть идея, как это понять, я буду очень рад, если решит помочь мне - спасибо заранее!

+0

Возможно, вы можете получить доступ к своей функции контроллера с помощью '$ parent.hasEventCreatedByUser (myDate)' в шаблоне DatePicker. Попробуйте. –

+0

@HimmetAvsar К сожалению, это не работает. Но я создал «miniController», который я использую только на кнопке с моей функцией, и каким-то образом он работает :) –

+0

http://stackoverflow.com/questions/35872958/disable-specific-single-date-and-multiple-dates -in-angularjs-only-datepicker-an/35874264? noredirect = 1 # comment59706187_35874264 вот и все, что вам нужно, я думаю! –

ответ

7

Я знаю, что это не очень хорошая идея внести изменения в исходный файл. Но если вы можете вносить изменения в исходный файл начальной загрузки ui, вы можете получить разные цвета. Вот один, который я сделал.

Ниже приводятся изменения в источнике.

Дата изменения шаблона подборщика (datepicker.html)

<tr ng-repeat=\"row in rows\">\n" + 
    "  <td ng-show=\"showWeekNumbers\" class=\"text-center\"><em>{{ getWeekNumber(row) }}</em></td>\n" + 
    "  <td ng-repeat=\"dt in row\" class=\"text-center\">\n" + 
    "  <button type=\"button\" style=\"width:100%;\" class=\"btn btn-default btn-sm\" ng-class=\"{'dt-disabled':dt.disabled,'btn-info': dt.selected,'dt-selected': dt.selected,'dt-available':(dt.verified && dt.available),'dt-verified':dt.verified}\" ng-click=\"select(dt.date)\" ng-disabled=\"dt.disabled\"><span ng-class=\"{'text-muted': dt.secondary}\">{{dt.label}}</span></button>\n" + 
    "  </td>\n" + 
    " </tr>\n" + 

Дата изменения Выбор контроллера (DatepickerController)

//Your modification starts 
    this.dateVerified = function(date,mode){ 
     var currentMode = this.modes[mode || 0]; 
     return ($scope.dateVerified && $scope.dateVerified({date: date, mode: currentMode.name})) 
    } 

    this.dateAvailable = function(date,mode){ 
     var currentMode = this.modes[mode || 0]; 
     return ($scope.dateAvailable && $scope.dateAvailable({date: date, mode: currentMode.name})) 
    } 
    //your modification end 

изменение директивы Date Picker (DatePicker)

.directive('datepicker', ['dateFilter', '$parse', 'datepickerConfig', '$log', function (dateFilter, $parse, datepickerConfig, $log) { 
    return { 
    restrict: 'EA', 
    replace: true, 
    templateUrl: 'template/datepicker/datepicker.html', 
    scope: { 
     dateDisabled: '&', 
     //your modification starts here 
     dateVerified:'&', 
     dateAvailable:'&', 
     //Your modification ends here 
    }, 



    ngModel.$setValidity('date', valid); 

    var currentMode = datepickerCtrl.modes[mode], data = currentMode.getVisibleDates(selected, date); 
    angular.forEach(data.objects, function(obj) { 
     obj.disabled = datepickerCtrl.isDisabled(obj.date, mode); 
    }); 

    //your modification starts here 
    //set dateVerfied 
    if(datepickerCtrl.dateVerified){ 
     angular.forEach(data.objects, function(obj) { 
      obj.verified = datepickerCtrl.dateVerified(obj.date, mode); 
     }); 
    } 
    //set date availabe 
    if(datepickerCtrl.dateAvailable){ 
     angular.forEach(data.objects, function(obj) { 
      obj.available = datepickerCtrl.dateAvailable(obj.date, mode); 
     }); 
    } 
    //Your modification ends here 
    ngModel.$setValidity('date-disabled', (!date || !datepickerCtrl.isDisabled(date))); 

    scope.rows = split(data.objects, currentMode.split); 
    scope.labels = data.labels || []; 
    scope.title = data.title; 

Ваш код шаблон

<datepicker ng-model="model.selectedDate" ng-click="dateClicked();" date-format="yyyy-MM-dd" date-type="string" ng-class="{'opacity-2':model.loadingDate}" style="width: 395px;height: 230px;margin:0 auto;" date-disabled="isDateNonAvailableDate(date, mode)" date-verified="dateVerified(date, mode);" date-available="dateAvailable(date, mode);" show-weeks="true" class="well well-sm" close-text="Close"></datepicker> 

Ваш контроллер

$scope.dateVerified= function(date, mode) { 
     return true; 

$scope.dateAvailable = function(date, mode) { 
     return true; // to get color 
    }; 

Ваш CSS

.dt-available{ 
    color: #fff; 
    background-color: green !important; 
    border-color: green !important; 
} 

.dt-disabled{ 
    color: #fff; 
    background-color: red !important; 
    border-color: red !important; 
} 

.dt-selected{ 
    color: #fff; 
    background-color: blue !important; 
    border-color: blue !important; 
} 

End Result

+0

Спасибо buddy :) –

+1

Любые идеи, как это сделать без изменения исходного файла? – JV3

4

Угловая UI Bootstrap Datepicker имеет свойство custom-class, в котором вы можете вызвать вашу функцию для определения класса:

custom-class (date, mode) (по умолчанию: null): необязательное выражение для добавляет классы на основе даты передачи и текущего режима (день | месяц | год).

Смежные вопросы