Angularjs и Scope NG-INIT при изменении данных
-
26-12-2019 - |
Вопрос
Поэтому у меня есть приложение календаря, где прямо сейчас пользователь выбирает даты начала / конца и нажимает на клику в Calendar. Это заполняет календарь. Однако у меня возникли проблемы, включая новые элементы в объеме. Например, вместо того, чтобы постоянно использовать ту же функцию снова и снова, чтобы рассчитать «дату ячейки» для некоторой ячейки из даты начала, номер недели, номер недели и т. Д., Я хочу хранить дату ячейки один раз в свой объем и позвольте всем остальным использовать это. Как-то я не могу сделать это, несмотря на много попыток. В приведенном ниже jsfiddle вы заметите дни месяца отображения в правом верхнем углу каждой камеры календаря. Однако, если вы измените даты, чтобы сказать месяц предыдущих, дни месяца обновления, но «дата ячейки», которую я отображал в ячейке, не обновляется!
Например, взять "SAT Jul 05 2014". Обновите даты, чтобы начать с 6/1, а далеко правая ячейка по-прежнему «Sat Jul 05 2014», хотя его день месяца отражает 7 июня! Соответствующий код находится в директиве «Callell» и директива «События». На калькуле я установил Celld в виде NG-int= 'Celld= Celldate (Num, Start_dt, $ index)'. Затем в событиях я просто отображаю использование {{Celld}}. Я мог бы получить его на работу, используя Telldate (Num, start_dt, $ index) в событиях, но я действительно не хочу использовать ту же функцию в миллион раз везде. Есть ли способ сохранить дату ячейки в объекте клеток и просто используйте его в охвата детей и обновлять его, когда данные обмениваются? В конце концов я передам дату ячейки к функции, чтобы получить данные событий на эту дату, то события будут повторять их, чтобы отобразить данные событий.
app.directive("events", function($compile, DateService) {
return {
restrict: "A",
replace: true,
scope: true,
template:
"<div>{{celld}}</div>",
link: function(scope, element, attrs) {
scope.DateService = DateService;
}
}
});
//calendar cell
app.directive("calcell", function($compile, DateService) {
return {
restrict: "A",
replace: true,
scope: true,
template:
"<td ng-init='celld=cellDate(num, start_dt, $index)' id='{{\"td\" + DateService.getDateInt(cellDate(num, start_dt, $index))}}' \
realclass='{{getScopeClass(cellDate(num, start_dt, $index))}}'>\
<div>\
<a class='CellDay'>{{DateService.getMonthDay(cellDate(num, start_dt, $index))}}</a>\
</div>\
<br/>\
<br/>\
<br/>\
<br/>\
<div events></div>\
</div>\
</td>",
link: function(scope, element, attrs) {
scope.DateService = DateService;
}
}
});
.
Спасибо!
Решение
Я смог сделать это работать, поместив мотолет на метку события.Не уверен, что это помогает.
<div events ng-attr-celld='{{cellDate(num, start_dt, $index)}}'></div>
.
Нет необходимости заменять его, а attr - это значение области области.
//replace: true,
...
scope: {celld:'@'}
.
А если вы еще не видели - one one ui календарь - может сохранитьтебе некоторое время.