AngularJS angular-ui-calendar TypeError: this. $ Compile не является функцией;this. $ compile имеет значение, когда он внутри $ onInit (), но не определен, когда он снаружи - PullRequest
0 голосов
/ 23 ноября 2018

В моей функции конструктора я передаю:

constructor($compile, uiCalendarConfig) {
    'ngInject';

    this.$compile = $compile;
    this.uiCalendarConfig = uiCalendarConfig;
}

и когда я регистрирую его значение внутри $ onInit () в начале его

$onInit() {
    console.log('this.$compile:', this.$compile, 'this.uiCalendarConfig:', this.uiCalendarConfig);
...
}

я получаю буквенный код $функция компиляции.

Но когда $ compile вызывается изнутри

eventRender( event, element, view ) {
  element.attr({'tooltip': event.title,
    'tooltip-append-to-body': true});
  console.log('event:', event);
  console.log('edited element:', element);
  console.log('view:', view);
  console.log('this.$compile:', this.$compile);
  this.$compile(element)(this);
};

, на который ссылается внутри:

this.uiConfig = {
      calendar: {
        height: 450,
        editable: true,
        header:{
          left: 'title',
          center: '',
          right: 'today, prev, next'
        },
        eventClick: this.alertOnEventClick,
        eventDrop: this.alertOnDrop,
        eventResize: this.alertOnResize,
        eventRender: this.eventRender
      }
};

результат console.log('this.$compile:', this.$compile); равен undefinedзначение этого. $ compile.

И это моя проблема, потому что я не знаю, почему он там не определен, если на инициализации контроллера это уже функция.

Кто-нибудь знаетчто мне может не хватать?

1 Ответ

0 голосов
/ 25 ноября 2018

Это потому, что eventRender вызывается в контексте uiConfig и в этом контексте нет $compile Я думаю!Одно средство, которое приходит мне в голову, - это сохранить ссылку на ваш контроллер и использовать ее внутри вашей eventRender функции.

var self = this;

eventRender( event, element, view ) {
  element.attr({'tooltip': event.title,
    'tooltip-append-to-body': true});
  console.log('event:', event);
  console.log('edited element:', element);
  console.log('view:', view);
  console.log('this.$compile:', this.$compile);
  self.$compile(element)(this);
};

Я не проверял ее, возможно, она вообще не работает.

...