javascript - 如何将 JSON 对象传递给 Angular 自定义元素

标签 javascript angular typescript angular7 custom-element

我使用 CUSTOM_ELEMENTS_SCHEMA 在 Angular 7 中创建了一个自定义元素。 我的 app.module.ts 如下:

    export class AppModule {
     constructor(private injector: Injector) {}
     ngDoBootstrap() {
       this.registerCustomElements();
     }

    registerCustomElements() {
      const HeaderElement = createCustomElement(AppComponent, {
        injector: this.injector
      });
      const FooterElement = createCustomElement(BcAngFooterComponent, {
        injector: this.injector
      });
      customElements.define("header-element", HeaderElement);
      customElements.define("footer-element", FooterElement);
  }
}

我在我的 app.component.html 中引用了这些自定义元素,如下所示:

<footer-element footer-data="footerInputData"></footer-element>

此 footerInputData 在我的 app.component.ts 文件中作为字符串引用。

 export class AppComponent {
  footerInputData: any = {title: "Page Title"};
}

在我的自定义元素的 HTML 中,我使用插值来显示作为输入传递给它的数据。

<div class="nav-list-wrap">
        {{footerData}}
</div>

当页面加载时,我没有看到显示的对象。相反,它显示“footerInputData”。

如何让我的自定义元素从我的 app.component.ts 文件中获取数据,而不是将数据显示为字符串。

此外,JSON 对象可以传递到我的自定义元素吗?

最佳答案

自定义元素旨在在 Angular 包装器外部使用,即使您可以在 Angular 包装器内部使用它们。 当你在 Angular 包装器之外使用它们时,你需要像这样使用它

<footer-element name='{"title": "Page Title"}'></footer-element> 

属性值应该被字符串化,如果你传递的是 json,json 字符串应该被严格格式化。

当您在 Angular 包装器中使用它时,您可以将它与 Angular 选择器一起使用,并且可以像旧方法一样传递数据。

<app-custom [name]="name"></app-custom>
//ts file
name = {title:"this is title"}

自定义component.ts文件

@Component({
  selector: 'app-custom',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent {
  @Input() name: any;
}

应用程序模块.ts

@NgModule({
  imports: [BrowserModule, FormsModule],
  declarations: [AppComponent, MainComponent],
  entryComponents:[
    AppComponent, MainComponent
  ]
})
export class AppModule {
  constructor(private injector: Injector) { }
  ngDoBootstrap() {
    //bootstraping angular app
    const AppElement = createCustomElement(MainComponent, { injector: this.injector });
    customElements.define('my-app', AppElement);

    //bootstraping custom element
    const el = createCustomElement(AppComponent, { injector: this.injector });
    customElements.define('footer-element', el);
  }
}

Check out the working example

关于javascript - 如何将 JSON 对象传递给 Angular 自定义元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54662669/

相关文章:

如果文本为 0,JavaScript 隐藏 DIV 标签

javascript - 从另一个 JavaScript 文件导入变量

javascript - ngrx 8影响其他类型的调度 Action

javascript - 如何避免 React 应用程序中的全局状态?

javascript - 如何检查元素是否使用 javascript 聚焦子元素?

javascript - 在浏览器控制台中获取调度的 NGRX 项目

angular - 有哪些方法可以区分以编程方式修改的表单控件和由用户修改的表单控件?

angular - 如何将外部 JS 文件包含到 angular5?

Javascript:如何在不创建循环依赖的情况下重用创建子实例的方法

typescript - 一个联合类型的所有可能的键