Директива не может быть привязана к компоненту?

#javascript #angularjs #angularjs-directive #angularjs-components

#javascript #angularjs #angularjs-директива #angularjs-компоненты

Вопрос:

https://plnkr.co/edit/kbz5uimNZ6vKTiT9QB6a?p=preview
Обновление: создано для тестирования.

У меня есть следующая директива egFiles для обработки статуса <input type="file" id="newFile" eg-files="model.files" has-file="model.hasFile" /> для загрузки файла.

 (function () {
    'use strict';
    angular.module('myApp').directive('egFiles', egFiles);

    function egFiles() {
        var directive = {
            link: link,
            restrict: 'A',
            scope: {
                files: '=egFiles',
                hasFiles: '='
            }
        };
        return directive;

        function link(scope, element, attrs) {
            element.bind('change', function () {
                scope.$apply(function () {
                    if (element[0].files) {
                        scope.files.length = 0; // Breakpoint not hit here
                        angular.forEach(element[0].files, function (f) {
                            scope.files.push(f);
                        });
                        scope.hasFiles = true;
                    }
                });
            });

            if (element[0].form) {
                angular.element(element[0].form)
                        .bind('reset', function () {
                            scope.$apply(function () {
                                scope.files.length = 0;
                                scope.hasFiles = false;
                            });
                        });
            }
        }
    }
})();
  

Следующий компонент Anguar 1.5 для использования директивы.

 (function (undefined) {
    'use strict';

    angular.module('myApp')
    .component('doc', {
        template: '...
<input type="file" id="newFile" eg-files="model.files" has-file="model.hasFile" />
     ....',
        bindings: {
            id: '<',
            "$router": '<'
        },
        controllerAs: 'model',
        controller: [controller]
    });

    function controller() {
        var model = this;

        model.$routerOnActivate = function (next, previous) {
            model.id = next.params.id;
        }

        model.hasFile = false;
        model.uploading = false;
    }
})();
  

Я установил точку останова в функции, связанной change с директивой egFiles. Однако точка останова никогда не достигается, когда я выбираю файл нажатием кнопки?

Комментарии:

1. В вашем Plunker отсутствует ng-app атрибут. Затем он пытается установить длину undefined , поскольку вы model.files нигде не определили. Кроме того, у вас, похоже, есть опечатка вокруг hasFiles vs hasFile .

2. Здесь он работает так, как ожидалось ~ plnkr.co/edit/YvU2gLakWnvBKp9GC3ED?p=preview

3. У меня все работает нормально. Под точкой останова вы имели в виду if (элемент [0].files) { область. Файлы. длина = 0; // Точка останова не попадает в эту строку. я могу выполнить эту строку. Изменение обычно работает, когда вы каждый раз выбираете разные изображения. Если я что-то не так понимаю, пожалуйста, поправьте меня