angular-element-自定义标签


一.  什么是angular自定义标签?

angular自定义标签,就是将angular里面的某些component转换成一个自定义标签,这个标签可以在任何平台使用,而不依赖angular,真的做到了跨平台使用。

二. 如何使用angular自定义标签?

有一些可以借鉴的网站可以先看下:

angular 官方地址:https://angular.io/guide/elements

链接1. https://tso1158687.github.io/blog/2020/04/06/introduce-to-angular-elements/

链接2. https://fullstackladder.dev/blog/2018/05/08/angular-advanced-angular-elements-intro/

步骤:

1. 在angular项目中添加angular elements

ng add @angular/elements

2. 修改app.module.ts

@NgModule({
  declarations: [...],
  imports: [...],
  providers: [...],
  bootstrap: [AppComponent]
})

移除掉 bootstrap: [AppComponent]

并修改为:
export class AppModule {
  constructor(injector: Injector) {
    const RevisedSearchElement: any = createCustomElement(RevisedSearchComponent, { injector });
    customElements.define('revised-search', RevisedSearchElement);
  }
  ngDoBootstrap() {}
 }

3. 修改index.html


  


  

这样的话,在anguar 的index页面就引用了自定义标签 ,可以成功运行

4. 如果想在非当前的angular项目中使用这个自定义标签:

 a. 修改package.json ,去掉打包时候的hash

"build": "ng build --prod --output-hashing=none",

b. 如果是Mac或者是Linux, package.json中添加,这样可以将几个js文件打包成一个js文件

cat dist/hello-angular-elements/{runtime-es2015,polyfills-es2015,main-es2015}.js > all.js

c. 如果是windows,则在dist文件夹目录下使用git bash 命令:

cat {runtime,polyfills,main}.js > revised-search.js

5. 这样在新项目中就可以直接引入revised-search.js, 并且使用标签了.



    
        "utf-8">
        <base href="">
        element test
        "stylesheet" type="text/css" href="styles.css"/>
    
    
        class="revisedSearch">
        
    

注意事项:

1. 一定要在app.module.ts中引入translate.service

export class AppModule {
    constructor(
    injector: Injector,
    private translateService: TranslateService
    ) {
      translateService.setDefaultLang('en');
      
      const RevisedSearchElement: any = createCustomElement(RevisedSearchComponent, { injector });
      customElements.define('revised-search', RevisedSearchElement);
    }
    ngDoBootstrap() {}
   }