Как включить ввод и кнопку из родительского компонента в angular?

У меня есть родительский компонент со следующим:

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), чтобы я мог выбрать любое изображение для загрузки в него ..

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

создать глобальную переменную, получить данные из @Output и назначить их переменной. значение переменной - истина и ложь. замените их на [disabled] = "variable"

Abhishek 09.01.2019 15:35

Отредактировал твой stackblitz stackblitz.com/edit/angular-file-upload-preview-wrdumr

Florian 09.01.2019 15:36

@Florian, какую правку вы внесли ?? Я мог видеть только результат, а не код, который вы изменили ... Хотя результат сам по себе такой же, как я дал ...

Maniraj Murugan 09.01.2019 15:38

@Abhishek, я не могу ничего редактировать в дочернем, потому что это другая библиотека, и я установил через npm install fileupload ..

Maniraj Murugan 09.01.2019 15:39

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

Florian 09.01.2019 15:52

@HelloWorld. Возникает ли у вас какое-либо событие после загрузки файла в дочерний компонент?

Abhishek 09.01.2019 16:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
736
2

Ответы 2

Привет, вы можете использовать свойство Input в дочернем компоненте. вот рабочий пример https://stackblitz.com/edit/angular-file-upload-preview-ptgq2f Примите, если ответ работает для вас.

Я ясно упомянул, что я не могу изменить дочерний компонент.

Maniraj Murugan 09.01.2019 15:42

извини, я это пропустил. не могли бы вы перепроверить мой ответ

Ved_Code_it 10.01.2019 07:38

В вашем 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;
  }
}

stackblitz

Это хороший подход ?? Как бы то ни было, что произойдет, если у меня будет 5 или 6 тегов кнопок внутри дочернего компонента?

Maniraj Murugan 09.01.2019 16:25

Другие вопросы по теме