Обновить представление в Angular6, когда мы устанавливаем переменную в функции подписки

Первый компонент, который отображает файл select html  введите описание изображения здесь

Когда я нажимаю кнопку просмотра, я перенаправляюсь на другой компонент Fileselect component, который является вторым компонентом this.goto('fileselect');

введите описание изображения здесь

Проблема в том, что когда я выбираю файл из файлового компонента, я должен отображать его в поле ввода первого компонента.

Когда я нажимаю кнопку «Выбрать класс», я вызываю функцию redirect ().

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

 redirect(){
  this._messageService.filter(this.selectedFile);
  this.router.navigateByUrl('');

}

И в первом компоненте, где мне нужно это имя файла, я подписался на функцию, как показано

ngOnInit() {
   this._messageService.listen().subscribe((m:any) => {
            this.fileName = m
            this.loadXMLasJSON()
            console.log(this.fileName)

});}

Я назначаю переменную this.fileName в функции подписки, когда я console.log получаю имя файла. Но вид не обновляется.

Мой код просмотра

 <input type="text"  class="form-control image-preview-filename" value="{{fileName}}" />

В чем может быть проблема?

Пожалуйста, помогите мне с этим.


person Ninad    schedule 03.08.2018    source источник
comment
Какое значение имеет this.fileName?   -  person Radonirina Maminiaina    schedule 03.08.2018
comment
Это имя файла, которое я выбрал, например example.xml.   -  person Ninad    schedule 03.08.2018
comment
Я бы посоветовал предпочесть ngModel, а во-вторых, обновить представление, вставить Changedetectorref в ваш конструктор, а в методе подписки использовать методы markForCheck () или detectChanges () из Changedetectorref. Вызовите один из этих методов после присвоения значения имени файла.   -  person Sumeet Kale    schedule 03.08.2018
comment
@SumeetKale, когда я это делаю, я получаю ошибку ViewDestroyedError: Попытка использовать разрушенное представление: detectChanges   -  person Ninad    schedule 03.08.2018
comment
Понятно. Думаю, ваш метод навигации неправильный. Вы используете обычную розетку маршрутизатора или указанную розетку маршрутизатора. Я думаю, вы можете решить эту проблему, используя именованную розетку маршрутизатора. В котором вы можете перемещаться по маршруту выбора файла в именованной розетке маршрутизатора, что должно предотвратить повреждение вашего первого компонента при навигации.   -  person Sumeet Kale    schedule 03.08.2018
comment
@SumeetKale, позвольте мне попробовать этот подход, спасибо   -  person Ninad    schedule 03.08.2018


Ответы (2)


Используйте [ngModel] вместо value:

<input type="text"  class="form-control image-preview-filename" [ngModel]="fileName" />
person Giacomo Voß    schedule 03.08.2018

Удалите двойные кавычки из атрибута значение.

Измените его на:

<input type="file" class="form-control image-preview-filename" value={{fileName}} />

person Syed Kashan Ali    schedule 03.08.2018
comment
Готово, это не имело никакого значения - person Ninad; 03.08.2018
comment
Попробуйте [(ngModel)], затем - person Syed Kashan Ali; 03.08.2018
comment
Измените тип ввода на текстовый файл. Надеюсь, это сработает. :) - person Syed Kashan Ali; 03.08.2018