SafeValue должен использовать [property]=binding, хотя я уже использую привязку свойств

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

<div [innerHtml]="logOutput"></div>

В моем компоненте я теперь добавляю некоторый контент с этой строкой кода

this.logOutput = this.sanitizer.bypassSecurityTrustHtml( this.logOutput + otpStr );

Но тем не менее я получаю эту ошибку «SafeValue должен использовать [свойство] = привязка».

Почему я получаю эту ошибку? Я уже использую привязку свойств! Я использую Ангуляр 5.

Редактировать: я пробовал использовать собственный канал внутри HTML, и он работал нормально, но мне нужно решение без каналов.

Редактировать2:

Вот моя функция, в которой я задаю HTML, может поможет. Полный рабочий пример невозможен, потому что мое приложение имеет дело с инструментами командной строки и потоками вывода (у меня есть Angular во фрейме Electron).

this.logStream.on('data', (chunk) => {
  let otpStr = chunk.toString();
  if (otpStr == '') {
    return;
  }

  otpStr = this.StylePipe(otpStr); // Convert ANSI Styles to HTML with CSS
  otpStr = otpStr.replace(/\r?\n/g, '<br />');
  otpStr = otpStr.replace(/<br \/><br \/>/g, '<br />');
  otpStr = otpStr.replace(/^<br \/>/, '');
  otpStr = otpStr.replace(/<br \/>$/, '');
  this.logOutput = this.sanitizer.bypassSecurityTrustHtml( this.logOutput + otpStr + '<br />' );
  this.ref.detectChanges();
});

this.logStream.on('end', () => {
  this.logOutput = this.sanitizer.bypassSecurityTrustHtml( this.logOutput + '<br />' );
  this.ref.detectChanges();
});

person Sumafu    schedule 27.01.2018    source источник
comment
Здесь отлично работает: stackblitz.com/edit/ . Опубликуйте полный минимальный пример, воспроизводящий проблему.   -  person JB Nizet    schedule 27.01.2018
comment
Я добавил еще немного кода. Рабочий пример будет очень сложным, потому что это не просто веб-приложение.   -  person Sumafu    schedule 27.01.2018
comment
Это совсем не сложно. Видите ли, я только что сделал: stackblitz.com/edit/angular- iottff?file=app%2Fapp.component.ts. Вы объединяете this.logOutput , который является не строкой, а экземпляром SafeHtml, с '‹br/›'. Не делай этого. Создайте строку HTML, объединив строки вместе, а затем вызовите bypassSecurityTrustHtml для этой строки.   -  person JB Nizet    schedule 27.01.2018
comment
Спасибо, функция "Не конкатировать" работает ;)   -  person Sumafu    schedule 27.01.2018


Ответы (1)


Теперь я решил проблему с помощью @JB Nizet в комментариях. Сейчас я использую две переменные. Первая — это вспомогательная переменная, содержащая необработанный HTML-код, который я сгенерировал, другая переменная содержит очищенный HTML-код, который привязан к HTML, потому что вы не можете объединить SafeHtml (результат обхода) и строку.

this.logOutputHtml += otpStr;
this.logOutput = this.sanitizer.bypassSecurityTrustHtml( this.logOutputHtml );
person Sumafu    schedule 27.01.2018