标签: angular-elements

为什么 Angular 构建创建的文件带有“es5”和“es2015”而不是“es6”(或根本没有后缀)?

我最近下载了Angular CLI(@angular/cli 9.0.1)。然后我继续创建一个新应用程序,以便我可以创建一个新的 Angular 元素,将其打包,然后在另一个应用程序中使用它。

在关注了一些博客之后,我遇到的每个博客的最后一步都在谈论从 dist/ 文件夹下生成的文件创建单个 JS 文件。例如:https : //blog.bitsrc.io/using-angular-elements-why-and-how-part-1-35f7fd4f0457

然后使用cat命令,我们串接runtime.jspolyfills.jsscripts.js中,并main.js从位于dist /角app文件夹的文件到预览文件夹内的文件angularapp.js。

ng build angular-app --prod --output-hashing=none相反,运行似乎会产生名为:

  • main-es5.js
  • main-es2015.js
  • polyfills-es5.js
  • polyfills-es2015.js
  • 运行时-es5.js
  • 运行时-es2015.js

我搜索了每个包含es5es2015术语的文件并将更改为es6,但它仍然产生相同的es5es2015文件名。我在这里做错了什么?

javascript typescript angular angular-elements

23
推荐指数
2
解决办法
2万
查看次数

如何将Angular Elements与“ ng g库”方法混合使用?

如您所知,“ ng g库”方法可帮助我们创建可重用组件的库。但是,如果我希望通过Angular Elements的支持将那些组件编译为Web组件呢?不仅如此,库中的每个组件都将被编译到其自己的文件夹或JS文件中。如何配置一个开发环境以实现这一目标?

例如:

如果创建一个Lib并添加一个自定义组件,我知道我可以对其进行编译,生成一系列文件夹,例如esm5,esm2015,fesm5等。现在,问题是:如何添加,比如说30个自定义组件到我的库中,然后在编译时,它将为每个组件创建一个文件夹,其中包含它们的Web组件版本...仿佛Angular Elements遍历了我的组件库并生成了每个组件的Web组件版本。

像这样:

lib/
lib/custom/comp1
lib/custom/comp2
lib/custom/comp3
lib/custom/comp4
Run Code Online (Sandbox Code Playgroud)

变成类似以下内容:

Dist/
Dist/custom/
Dist/custom/bundle
Dist/custom/esm5
Dist/custom/esm2015
Dist/custom/comp1_web_independend_component_version
Dist/custom/comp2_web_independend_component_version
Dist/custom/comp3_web_independend_component_version
Dist/custom/comp4_web_independend_component_version
Run Code Online (Sandbox Code Playgroud)

我找到的最接近的解决方案是这样的:

https://medium.com/@rahulsahay19/running-multiple-angular-elements-on-the-same-page-5949dac5523

我还要求Angular CLI团队提供帮助:

https://github.com/angular/angular-cli/issues/13999

angular-cli angular ng-packagr angular-elements

20
推荐指数
1
解决办法
946
查看次数

如何使用Webpack或Angular CLI将角元素编译为Web组件?

我使用Pascal Precht的教程通过Angular构建了一个简单的Web组件,您可以在这里看到它.它自动神奇地编译链接中的Stackblitz,但不是本地.

我的最终目标是将生成的Web组件的代码放在本地的单独文件中.最终,我会将其上传到某处并通过单个<script>标签将其拉入,就像普通的raw-html/javascript Web Components一样.我认为问题不言自明,但如果您愿意,可以阅读以下详细信息:


细节:

要在上面的链接中总结我的代码,我有一个非常基本的组件:

import { Component } from '@angular/core';

@Component({
  selector: 'hello-world',
  template: `<h1>Hello world</h1>`
})

export class HelloComponent  {}
Run Code Online (Sandbox Code Playgroud)

我有一个模块:

import { NgModule, Injector } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { createCustomElement } from '@angular/elements'
import { HelloComponent } from './hello.component';

@NgModule({
  imports: [BrowserModule],
  declarations: [HelloComponent],
  entryComponents: [HelloComponent]
})

export class AppModule { 
  constructor(private injector: Injector) {}
  ngDoBootstrap() {
    const HelloElement = createCustomElement(HelloComponent, …
Run Code Online (Sandbox Code Playgroud)

webpack angular-cli angular angular-elements

14
推荐指数
2
解决办法
1890
查看次数

从现有项目构建角度元素

我们有一个现有的Angular 8项目,其中包含许多常用组件(例如custom datepickers, numeric inputs, ...)。该项目本身是一个标准的Angular应用程序。

我们希望将其中一些组件提取为Angular元素,以便可以在其他Angular应用程序甚至与Angular不相关的其他项目中使用。

是否可以通过仅在生成的JavaScript文件中包含特定于单个Angular元素的代码的方式构建项目?

我需要的是这样的: ng build --element myDatePicker

这应该myDatePicker-Element只为所有具有所有所需依赖项的项目生成所有JavaScript文件,而无需从项目中获取任何其他代码(如other components, modules, ...)。

使用时,整个应用仍应正常构建ng build

angular-cli angular angular-elements

13
推荐指数
3
解决办法
668
查看次数

角度元素:对材料的依赖性

我正在创建一个Angular Element用于其他项目.元素是在其模板中包含Angular Material组件的组件,因此最终我的元素要求页面<link>一个Material主题CSS文件(以及材质图标和材料字体文件,并且link标签只能出现在文档中<head>).

很高兴地说,所需要的只是在页面上调用platformBrowser().bootstrapModuleFactory(...)和写入<some-custom-element>而没有进一步的指令.那可能吗?

要求我的自定义元素的用户链接到<head>他们页面中的所有CSS文件是否可以接受?我想这个模式,以后添加新的依赖项不会是向后兼容的更改,我必须告诉大家添加新的CSS文件或创建一个新的自定义元素.

angular-material angular angular-elements

9
推荐指数
1
解决办法
1191
查看次数

“NgElementConstructor&lt;unknown&gt;”类型的参数不可分配给“CustomElementConstructor”类型的参数

我在 VSCode( 1.44.0-insider ) 中使用 Angular9 创建 Angular Elements 时收到一个奇怪的警告:

export class AppModule { 
  constructor(private injector: Injector) {
    const helloElement = createCustomElement(HelloComponent, {injector});
    customElements.define('my-hello', helloElement);
  }
  ngDoBootstrap() {}
}
Run Code Online (Sandbox Code Playgroud)

类型helloElement不接受,并带有来自打字稿的错误消息:

“NgElementConstructor”类型的参数不可分配给“CustomElementConstructor”类型的参数

visual-studio-code angular angular-elements

9
推荐指数
1
解决办法
2624
查看次数

Angular 应用程序中的 Angular 元素在优化时会产生无限重新加载问题

TL;DR:我正在尝试使用Angular Elements作为Angular应用程序的插件。如果我在我的应用程序上使用--prod它构建元素ng serve(开发设置),但是当我ng serve --prod在我的应用程序上使用它时或在ng build --prod我的应用程序(生产设置)之后使用它时它会无限重新加载。

但是,如果我构建了元素添加--optimization=false,则适用于我的高效应用程序,但不适用于我的开发设置。

关键是,我期待的是建立一个角形元件--prod就可以了,对于两种情况。

问题有没有办法解决这个问题?


现在,长读。

在工作中,我们试图在我们的Angular站点中使用可配置的插件,其中服务器是告诉哪个插件处于活动状态的。

我们尝试动态加载Angular模块,但这是一个完全不同的问题,我们又把它搁置一旁。

所以,我们接下来想要尝试的是Angular Elements,它有点工作,除非我们按照它应该的方式构建所有东西。

首先,我开始关注本教程https://scotch.io/tutorials/build-a-reusable-component-with-angular-elements/amp并忽略了所有内容,okta因为我的功能有所不同。

创建:

我使用下一个命令创建了我的核心应用程序,这将是托管插件的应用程序:

  • ng new core --routing --skip-git --style scss --skip-tests --minimal

然后我使用这个命令创建了一个插件/角度元素:

  • ng new plugin --skip-git --style scss --skip-tests --minimal

插入:

所有的创作后,我走进我的插件,并在评论这条线polyfills.ts,我在这个网站阅读的地方,它解决的问题NgZone已经加载,这是正确的:

// import 'zone.js/dist/zone';  // Included with Angular …
Run Code Online (Sandbox Code Playgroud)

javascript plugins typescript angular angular-elements

8
推荐指数
1
解决办法
1981
查看次数

角度 6 元素布尔输入参数

我正在构建一个角度元素并将一些输入参数传递给它。我可以很好地传递一些字符串输入参数(ikrId 和环境工作得很好),但是很难通过角度元素将布尔值传递给 showTitle 输入属性(将 showTitle 属性从父角度组件传递给组件工作正常)。

这是组件片段:

export class MyComponent implements OnInit, OnDestroy {

  @Input() ikrId: string;
  @Input('environment') environment: IkrEnvironment = 'PROD';
  @Input('showTitle') showTitle = true;
Run Code Online (Sandbox Code Playgroud)

这是我在普通旧 html 中使用它的方式:

<my-element environment="DEV" ikr-id="889fb69f-71a5-4881-8528-0b43a07599f0" show-title="false"></my-element>
Run Code Online (Sandbox Code Playgroud)

但是节目标题没有传递到我的组件中,它总是正确的。

我在这里缺少什么?

谢谢!

angular angular6 angular-elements

7
推荐指数
1
解决办法
8465
查看次数

角度元素输出在 IE11 中不起作用

我尝试让 Angular Elements 在 IE11 中工作。我的自定义元素(简单按钮)已经显示,输入绑定按预期工作,但输出绑定没有。

在 IE 11 中单击我的自定义元素按钮会导致错误:

该对象不支持此操作

到目前为止我做了什么:

  1. 删除添加的自定义元素的 polyfill ng add @angular/elements(在 IE 中无法正常工作)
  2. 将所有 Angular 包更新为 7.2.1

  3. 将以下 polyfills 添加到polyfills.ts

import 'core-js/shim'
import '@webcomponents/shadydom/shadydom.min.js';
import '@webcomponents/custom-elements/src/native-shim';
import '@webcomponents/custom-elements/custom-elements.min';
Run Code Online (Sandbox Code Playgroud)
  1. 手动引导模块

  2. ng build --output-hashing=none并将所有生成的文件打包到btn-element.js其中http-server用于本地测试(请参阅下面的index.html)。

我错过了特定的 polyfill 还是我做错了什么?或者它只是不可能?

app.module.ts:

@NgModule({
  declarations: [ ButtonComponent ],
  imports: [ BrowserModule ],
  entryComponents: [ ButtonComponent ]
})
export class AppModule {
  constructor(private injector: Injector) {
    const customBtn = createCustomElement(ButtonComponent, { injector …
Run Code Online (Sandbox Code Playgroud)

internet-explorer-11 custom-element angular angular-elements

7
推荐指数
1
解决办法
3934
查看次数

Angular 元素与 Angular 库?

我的团队处理多个角度项目。为了代码重用,我们将许多表示组件提取到库中,然后在我们的各种项目中使用它们。

那么,鉴于我们所有的项目都是基于 angular 的,而且我们已经使用了库,我们还能从 angular 元素中获得什么?

我开始研究元素的原因是:

我们的大部分旧项目都使用 Bootstrap 3。我们希望将 Bootstrap 4 与我们制作的新东西一起使用。所以我想知道一个元素是否可以用 Bootstrap 4 设计,并在用 B-3 设计的地方使用它而不会破坏?

那可能吗 ?

web-component angular angular-library angular-elements

7
推荐指数
1
解决办法
3092
查看次数