Хобрук: Ваш путь к мастерству в программировании

ng-repeat директива angular не работает

Я пытаюсь создать календарь, используя угловые директивы.

У меня есть следующая директива, которая отлично работает:

   angular.module('acDaySelectCalendar',[])
  .directive('acMonth', function () {
    return {
      template: '<div class="monthcontainer"><table class="calendarmonth" width="210" border="0" align="center" cellpadding="0" cellspacing="0">\
          <tbody><tr>\
            <td class="mois" colspan="7">{{acDate | date:"MMMM yyyy"}}</td>\
            </tr>\
          <tr>\
            <td>D</td>\
            <td>L</td>\
            <td>M</td>\
            <td>W</td>\
            <td>J</td>\
            <td>V</td>\
            <td>S</td>\
          </tr>\
          <tr ng-repeat="week in weeks track by $index">\
            <td ng-repeat="day in week track by $index">{{day | date: "d"}}</td>\
          </tr>\
        </tbody></table></div>',
      restrict: 'E',
      scope:{
        acDate: '@'
      },
      controller: 'acMonthController'
    };
  });

директива этого контроллера создает массив «weeks», каждый элемент которого содержит массив дней для каждой недели, что позволяет затем выполнять ng-repeat по неделям и дням, чтобы построить таблицу, отображающую дни месяца.

Все отлично работает с кодом, показанным ниже, но проблема в том, что когда я пытаюсь заменить внутренний td следующей директивой angular:

angular.module('acDaySelectCalendar')
  .directive('acDay',function() {
     return {
      template: '<td transclude></td>',
      restrict: 'E',
      transclude: true,
      //transclude:true,
      }
  });

А затем изменить директиву acMonth следующим образом, чтобы использовать директиву ac-day:

   angular.module('acDaySelectCalendar',[])
  .directive('acMonth', function () {
    return {
      template: '<div class="monthcontainer"><table class="calendarmonth" width="210" border="0" align="center" cellpadding="0" cellspacing="0">\
          <tbody><tr>\
            <td class="mois" colspan="7">{{acDate | date:"MMMM yyyy"}}</td>\
            </tr>\
          <tr>\
            <td>D</td>\
            <td>L</td>\
            <td>M</td>\
            <td>W</td>\
            <td>J</td>\
            <td>V</td>\
            <td>S</td>\
          </tr>\
          <tr ng-repeat="week in weeks track by $index">\
            <ac-day ng-repeat="day in week track by $index">{{day | date: "d"}}</ac-day>\
          </tr>\
        </tbody></table></div>',
      restrict: 'E',
      scope:{
        acDate: '@'
      },
      controller: 'acMonthController'
    };
  });

Во втором случае внутри элементов tr ничего не отображается.

Любая идея о том, что может происходить?

Помощь !!!

Спасибо, Ориол.


Ответы:


1

Попробуйте установить replace=true в коде директивы:

angular.module('acDaySelectCalendar')
 .directive('acDay',function() {
 return {
  replace: true,
  template: '<td transclude></td>',
  restrict: 'E',
  transclude: true,
  //transclude:true,
  }
 });
18.05.2015
  • Я не пробовал ваш ответ, хотя из того, что я прочитал, это могло быть исправлено. 21.05.2015
  • Я не пробовал, но из того, что я прочитал, использование замены должно было решить мою проблему. С другой стороны, я читал, что замена устарела ... вы знаете об этом? 21.05.2015

  • 2

    Разве transclude не должно быть ng-transclude?

    angular.module('acDaySelectCalendar')
     .directive('acDay',function() {
     return {
      replace: true,
      template: '<td ng-transclude></td>',
      restrict: 'E',
      transclude: true,
      //transclude:true,
      }
     });
    
    18.05.2015
  • Да... это была ошибка, но на результат она не повлияла. 21.05.2015

  • 3

    Моя проблема была связана с угловым добавлением элемента div вокруг шаблона директивы. Я считаю, что это нарушило схему таблицы, и браузер просто проигнорировал эту часть.

    На данный момент я решил проблему, создав повтор с помощью элемента td, а затем поместив свою директиву внутри элемента td.

    20.05.2015
    Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..