#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
vshasFile
.2. Здесь он работает так, как ожидалось ~ plnkr.co/edit/YvU2gLakWnvBKp9GC3ED?p=preview
3. У меня все работает нормально. Под точкой останова вы имели в виду if (элемент [0].files) { область. Файлы. длина = 0; // Точка останова не попадает в эту строку. я могу выполнить эту строку. Изменение обычно работает, когда вы каждый раз выбираете разные изображения. Если я что-то не так понимаю, пожалуйста, поправьте меня