У меня есть родительский компонент со следующим:
app.component.html:
<h1> Look at console </h1>
<app-profile-image></app-profile-image>
app.component.ts:
ngOnInit() {
console.info((document.getElementById('fileInput') as any));
console.info((document.getElementById('fileInput') as any).disabled);
console.info((document.getElementsByClassName('hover-text') as any));
console.info((document.getElementsByClassName('hover-text') as any)[0].disabled)
}
Вы можете увидеть реализацию родительского и дочернего компонентов в примерhttps://stackblitz.com/edit/angular-file-upload-preview-zaipvg
Здесь, в дочернем компоненте, вы могли видеть следующее:
<button class = "hover-text" [disabled] = "true">Choose file</button>
и
<input id = "fileInput" type='file' (change) = "onSelectFile($event)" [disabled] = "true">
Оба они по умолчанию отключены.
Я пытаюсь сделать необходимо включить эти два отключенных атрибута с помощью родительского.
Дочерний <app-profile-image></app-profile-image>, который я использую, является библиотекой в моем реальном приложении, что означает, что я не могу напрямую изменить код дочернего элемента, поэтому через родительский элемент мне нужно изменить атрибут disabled, чтобы включить его.
Я пытался,
console.info((document.getElementById('fileInput') as any));
и
console.info((document.getElementsByClassName('hover-text') as any));
и оба дают атрибут disabled (вы можете увидеть консоль в данном примере)
Но,
console.info((document.getElementById('fileInput') as any).disabled);
и
console.info((document.getElementsByClassName('hover-text') as any)[0].disabled)
дает результат как false, но я получаю отключенный атрибут в указанном выше console.info, но тогда почему я получаю false как результат, даже если атрибут присутствовал?
Если он дает результат как true, то известно, что disabled имеет значение true, поэтому в зависимости от условия я могу включить кнопку и ввод, но не знаю причину, по которой он дает disabled как false в консоли.
Пожалуйста, помогите мне включить отключенные button и input в данный пример с помощью только родительский компонент (то есть app.component.ts), чтобы я мог выбрать любое изображение для загрузки в него ..
Я никак не могу редактировать дочерний компонент, потому что это пакет библиотеки, и у меня нет кода в моем реальном приложении, и единственное, что я могу сделать, это редактировать только родительский компонент.
Отредактировал твой stackblitz stackblitz.com/edit/angular-file-upload-preview-wrdumr
@Florian, какую правку вы внесли ?? Я мог видеть только результат, а не код, который вы изменили ... Хотя результат сам по себе такой же, как я дал ...
@Abhishek, я не могу ничего редактировать в дочернем, потому что это другая библиотека, и я установил через npm install fileupload ..
@HelloWorld Я не менял в детстве, но я не понял, что вам нужно включить кнопку. Я сейчас пытаюсь найти решение
@HelloWorld. Возникает ли у вас какое-либо событие после загрузки файла в дочерний компонент?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Привет, вы можете использовать свойство Input в дочернем компоненте. вот рабочий пример https://stackblitz.com/edit/angular-file-upload-preview-ptgq2f Примите, если ответ работает для вас.
Я ясно упомянул, что я не могу изменить дочерний компонент.
извини, я это пропустил. не могли бы вы перепроверить мой ответ
В вашем app.component.html:
<app-profile-image (mouseenter)=onProfileImageHovered()></app-profile-image>
В вашем app.component.ts:
onProfileImageHovered(){
document.getElementById('fileInput')['disabled'] = false;
const hoverTextCollection = document.getElementsByClassName('hover-text');
if (!hoverTextCollection) {
return null;
}
const btn = Array.from(hoverTextCollection).find((e) => {
return (e instanceof HTMLButtonElement &&
e.innerHTML === 'Choose file');
});
if (btn) {
btn['disabled'] = false;
}
}
Это хороший подход ?? Как бы то ни было, что произойдет, если у меня будет 5 или 6 тегов кнопок внутри дочернего компонента?
создать глобальную переменную, получить данные из
@Outputи назначить их переменной. значение переменной - истина и ложь. замените их на[disabled] = "variable"