通过http.get观察角4更新
我想更新从API调用中返回的html中的observable。通过http.get观察角4更新
我想知道是否有人可以帮助我。
的HTML(另一个部件)
<common-content [theme]="theme" ></common-content>
和组件是:
所以不是做一个 “替换” 可观察到的应该只是自动更新。
我试过使用一个订阅,我也试过了一个承诺,但是我似乎没有能够获得语法的行为。
任何人都可以帮忙吗?
在此先感谢
我建议您更新<string> f['_body'];
更改为<string>f.text()
,也innerHTML = "{{innerHtml}}"
到[innerHTML]="view"
反正检查以下plnkr链接,因为它是做你正在试图执行
this._http.get(link).subscribe(f => {
this.loading = false;
var content = <string>f.text();
this.view = content.replace("{{theme.Name}}", this.theme.name);
}, (error) => {
this.loading = false;
console.error(error);
alert(error);
});
的到底是什么模板是这样的
content <button (click)="open('external.html')">Open Page</button>
<strong *ngIf="loading">LOADING...</strong>
<div [innerHTML]="view"></div>
external.html
是s imple如下
me playing around with this theme with name
<b>
{{theme.Name}}
</b>
这里是运行Plnkr
但对于字符串插值处理,如果内容是相同的模板,因为父加载它,并绑定this
到模板的范围,这是类似角1 NG-包括检查此answer,因为它有助于在解决了(而不是重新做的话),并注意这是角4和上述
使用Angular 4.0.0-beta.6's ngComponentOutlet。
感谢您的反馈Theophilus,不幸的是,当我使用“[innerHTML] =”view“”,如上所述,我在视图上获得{{theme.Name}}而不是数据,所以我仍然需要假装我使用“替换”命令执行插值,而我更喜欢可观察的句柄替换,就像它通常那样。因此,我不想看到{{theme.Name}},而是想看到“黄色主题”(或者我在配置文件中输入的任何内容)。 – Mick
检查plnkr链接,它将替换它,还是试图使加载的innerHTML内容像'ng-include'一样工作? –
是的。这个想法是我有多个主题。我有一些在这些主题中很常见的文件。所以我想加载组件,而不加载共同的主题,因为我想使用原始主题而不是改变它。 – Mick
1)你想要达到的目标还不清楚。 我可以做的是成功,你想更新dom。 2)不要使用内部html,并使用插值或ngModel与杀菌剂相同。 3)另一种方法是为同一个创建一个自定义的可重用指令。
方式可能是:
1)使管道的消毒:
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
/**
*
* @export
* @class SafeHtmlPipe
* @implements {PipeTransform}
*/
@Pipe({
name: 'safeHtml'
})
export class SafeHtmlPipe implements PipeTransform {
/**
*
* @param {DomSanitizer} sanitizer
* @memberof SafeHtmlPipe
*/
constructor(private sanitizer: DomSanitizer) { }
/**
*
* @param {any} style
* @returns
* @memberof SafeHtmlPipe
*/
transform(style) {
// return this.sanitizer.bypassSecurityTrustStyle(style);
return this.sanitizer.bypassSecurityTrustHtml(style);
// return this.sanitizer.bypassSecurityTrustXxx(style); - see docs
}
}
2)使用它像:
<div class="card_description" [innerHTML]="scenarioStepDataDesc | safeHtml"></div>
其中scenarioStepDataDesc是你的HTML内容。
3)使用管道和其它可重用的组件共享模块/指令
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MaterialModule } from '../material/material.module';
import { BlockUIModule } from 'ng-block-ui';
import { AutoCompleteComponent } from './components/autoComplete/autoComplete.component';
import { DialogDataComponent } from './components/dialog/dialog.component';
import { SafeHtmlPipe } from './pipes/safeHtml.pipe';
/**
*
* @export
* @class SharedModule
*/
@NgModule({
imports: [CommonModule, FormsModule, MaterialModule, BlockUIModule, ReactiveFormsModule],
exports: [
CommonModule,
FormsModule,
MaterialModule,
BlockUIModule,
ReactiveFormsModule,
AutoCompleteComponent,
DialogDataComponent,
SafeHtmlPipe
],
declarations: [AutoCompleteComponent, DialogDataComponent, SafeHtmlPipe]
})
export class SharedModule { }
享受:)
你能证明F的 – Carsten
只是在一个芯片上的内容,而不是' F [ '_body'];'改为' f.text()'更安全 –
我不明白你在问什么。你想要达到什么目的?你的代码发送一个HTTP请求,当响应返回时,用响应的主体初始化组件的innerHtml字段(在替换之后)。你还想要做什么? –