контроллер директивы angular, возвращающий undefined

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

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

Контроллер директивы this возвращает undefined, что, в свою очередь, затрудняет передачу методов в дочернюю директиву...

вот мой код для родительской директивы:

app.directive('defaultHeader', () => {

    let defaultHeaderCtrl = ($scope, $element) => {

        let containEl,
            elHeight = 500;

        console.log(this) // returns 'undefined'

        function resizeElement(el, height) {
            el[0].style.height = `${height}px`
        }

        if (_.isUndefined($scope.coverImgUrl)) {
            resizeElement($element, elHeight);
        } else {

        }
    };

    return {
        restrict: 'A',
        scope: {
            coverImgUrl: '='
        },
        controller: defaultHeaderCtrl
    };
});

Эта скрипка показывает, что контроллер директив this должен возвращать конструктор.

Вот некоторый контекст, если кому интересно:

  • Шаблон пользовательского интерфейса маршрутизатора представляет собой элемент директивы <div default-header data="data"></div>
  • ui router разрешает данные, затем передает их через контроллер в директиву

Спасибо за помощь


person geoctrl    schedule 06.12.2015    source источник
comment
ограничить «A» в коде директивы, но в вашем шаблоне вы используете директиву как элемент.   -  person Fidan Hakaj    schedule 06.12.2015
comment
спасибо @FidanHakaj - это был просто пример кода, но я исправил его, чтобы лучше представить реальную директиву   -  person geoctrl    schedule 06.12.2015
comment
Я открыл вашу скрипку, и она записывает Constructor {}, а не undefined   -  person Mario Lamacchia    schedule 06.12.2015
comment
@MarioLamacchia - точно - скрипка показывает, что она должна возвращать конструктор, тогда как моя директива в моем проекте не была   -  person geoctrl    schedule 06.12.2015


Ответы (2)



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

Я использую babeljs, и, очевидно, что-то происходит с областью видимости, когда я использую синтаксис стрелочной функции для контроллера () => {}.

После переключения обратно на function() {} this теперь возвращает конструктор, и директивы работают, как и ожидалось.

См. отмеченный ответ выше для контекста ^

person geoctrl    schedule 06.12.2015