标签: angular-elements

角度元素 - 将复杂的输入传递给我的Web组件

我最近开始使用角度V6发布的角度元素,我开了一个小沙盒项目. https://github.com/Slash7GNR/ndv-angular-elements 现在我试图向我的web组件添加一个更复杂的输入 - 我试图按如下方式添加数组输入:在app.component.ts中我添加了:

@Input() welcomeMessages: string[];
Run Code Online (Sandbox Code Playgroud)

在我添加的模板中:

<div *ngFor="let message of welcomeMessages; let index = index">
    {{index}} - {{message}}
</div>
Run Code Online (Sandbox Code Playgroud)

然后,我创建了一个静态html文件并添加了以下代码:(pls-wrk是由角元素功能生成的Web组件)

<pls-wrk></pls-wrk>
<script>
let arr = [“wow”,”wow2"];
let elementByTag = document.getElementsByTagName(‘pls-wrk’)[0];
elementByTag.setAttribute(“welcome-messages”, arr);
</script>
<script src="ndv-elements.js"></script>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

未捕获的错误:无法找到'string'类型的不同支持对象'哇,哇'.NgFor仅支持绑定到诸如Arrays之类的Iterables.

我也试过通过元素本身绑定数组,如下所示:

<pls-wrk welcome-messages=”[‘wow’,wow2']”></pls-wrk>
Run Code Online (Sandbox Code Playgroud)

但这都不奏效.

我也试过绑定一个作为对象的输入,但我在html中看不到结果.

这里的任何人都可以成功地将数组/对象作为输入传递给角元素?

angular angular-elements

6
推荐指数
1
解决办法
2603
查看次数

我可以在单个js文件中使用能发出Angular元素的角度库吗?

我开始接触角6位,并且对Angular Elements和新的库项目非常感兴趣。我有一个即将到来的项目,可能需要这两个新功能。

我需要创建可在Web框架之间重用的自定义UI组件,但我还希望获得在角项目中使用它们的一流支持。我已按照本教程进行操作,并拥有一个angular6应用程序,该应用程序注册自定义元素,并将webpack捆绑包合并到一个文件中。然后,我可以在纯HTML页面中使用该单个js文件,并且一切正常。

关键是在库项目中创建这些自定义元素会很棒。这样,我可以在内部npm注册表中分发我的库,以及构建包含所有自定义元素的js并将其部署在CDN上。

是否可以在新的库项目中构建Angular Elements?

angular angular-library angular6 angular-elements

6
推荐指数
1
解决办法
721
查看次数

如何在角度应用程序中嵌入角度元素?

我有一个角度元素,带有自定义标记名 - fancy-button。如何嵌入fancy-button角度应用程序?

我尝试了以下方法,但都没有奏效-

  1. 进口角元件脚本index.html/angular.json[scripts]和嵌入fancy-buttonapp.component.html(在角应用程序中运行根组件)

  2. 在进口角元件脚本app.component.html和也嵌入fancy-buttonapp.component.html(在角应用根组件运行)

谢谢

angular angular-elements

5
推荐指数
1
解决办法
724
查看次数

如何使用Angular Universal创建Angular自定义元素:SSR

我正在尝试使用Angular Universal创建一个Angular应用程序:SSRCustom Elements

我下载了Angular Universal:SSR中可用的示例代码,并向AppModule的构造函数中的Custom Elements添加了以下代码行

const ele = createCustomElement(AppComponent, {injector});
customElements.define('custom-ele', ele);
Run Code Online (Sandbox Code Playgroud)

它的构建很好,但是当我尝试为其提供服务时,出现以下错误

...universal\dist\server.js:66760
var elProto = Element.prototype;

ReferenceError: Element is not defined
at Object.<anonymous> (...universal\dist\server.js:66760:15)
at __webpack_require__ (...universal\dist\server.js:20:30)
....
Run Code Online (Sandbox Code Playgroud)

是因为Element是仅用于浏览器的本机对象,并且由于其在服务器端,因此无法引用仅用于浏览器的本机对象?有没有解决的办法?

angular-universal angular angular-elements

5
推荐指数
1
解决办法
548
查看次数

父组件中的 Angular Elements @Input() 绑定

我被一个无法解决的问题困住了几个小时。我创建了一个组件并将其捆绑为一个 js 文件。我想将此js文件加载到另一个项目中。到目前为止,一切都很好。但是我创建了一个带有 @Input() 装饰器的组件。现在,当我在另一个项目的 html 中添加我的自定义组件并直接传递 @Input() 属性时,仍然一切正常。但我希望这个属性不直接在 html 文件中传递,我想将它绑定到这个组件中。说得够多了,让我们一步一步地看看我到目前为止所做的

已安装的库和依赖项

npm i @angular/elements @webcomponents/custom-elements fs-extra concat --save

导入的脚本

"scripts":
[
"node_modules/@webcomponents/custom-elements/custom-elements.min.js",
"node_modules/@webcomponents/custom-elements/src/native-shim.js"
]
Run Code Online (Sandbox Code Playgroud)

创建组件

打字稿文件

@Component({
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
})

export class AppComponent {
  @Input() subtitle: string;
}
Run Code Online (Sandbox Code Playgroud)

html文件

<h1>Any Title<h1/>
<h4>{{subtitle}}</h4>
Run Code Online (Sandbox Code Playgroud)

将组件注册在 AppModule.ts

export class AppModule {constructor(private injector: Injector) {  }

ngDoBootstrap() {
  const widgetName = createCustomElement(AppComponent, {injector: this.injector});
  customElements.define('widget-name', widgetName);
}
Run Code Online (Sandbox Code Playgroud)

现在我可以在 index.html 中添加这个自定义组件,ng serve并且一切正常。

我有一个构建脚本,它将组件捆绑到一个 js 文件中。这对这段代码非常有效。这是我添加到另一个项目中的内容。

工作示例

<widget-name subtitle="Subtitle of this …

web-component typescript angular angular-elements

5
推荐指数
0
解决办法
1352
查看次数

同时在 chrome 和 IE11 中支持 Angular 元素的问题

我一直在尝试使用 Angular Elements 并试图实现最佳的浏览器兼容性。但是我似乎遇到了死胡同,因为当我为 Shadow DOM 添加一个 IE polyfill 时,它破坏了 chrome 中的元素。

最初我遇到了错误“无法构建 HTML 元素”,因此我将 tsconfig.json 中的“目标”更改为 es2015/es6。

配置文件

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

成分

// @dynamic
@Component({
    selector: 'flexybox-cardmanagement',
    templateUrl: './card-management.component.html',
    styleUrls: ['./card-management.component.scss'],
    encapsulation: ViewEncapsulation.ShadowDom
})
Run Code Online (Sandbox Code Playgroud)

更改目标碰巧破坏了 IE,因为不支持 es2015/es6+。所以我碰巧在@webcomponents 包中找到了 custom-elements-es5-adapter,它包装了 ES5,为需要它的浏览器提供必要的 ES6 功能。然后我还必须添加对自定义元素的支持。

polyfills.ts

/*****************************************************************************************
 * APPLICATION …
Run Code Online (Sandbox Code Playgroud)

ecmascript-5 polyfills ecmascript-6 angular angular-elements

5
推荐指数
1
解决办法
4968
查看次数

微前端路由:Web 组件/角度元素中的角度路由器

我正在使用微前端架构创建一个 UI 应用程序。我有三个应用程序:1.micro -app-a(用角度编写)2.micro -app-b(用角度编写)3.shell应用程序(用角度编写)

我的微应用程序-a有自己的角度路由器来管理路由,类似地,微应用程序-b也有自己的角度路由器,它们单独按预期工作,但当我将这两个微应用程序组合为一个时,我无法管理路由Web 组件(@angular/element)集成到单个 shell 应用程序中。我不知道如何管理路由。请有这方面知识的人帮助我。:)

routes web-component angular angular-elements micro-frontend

5
推荐指数
0
解决办法
1935
查看次数

Angular Element - 将 Shadow DOM 设置为关闭

当使用默认设置创建角度元素时,影子根处于打开状态。有谁知道是否可以创建具有封闭阴影根的角度元素?

web-component angular angular-elements

5
推荐指数
0
解决办法
756
查看次数

Angular Elements - 它们是 NRWL/NX 中的库还是应用程序?

尝试在 NX 工作区中构建一套角度元素(Web 组件)。

我首先尝试作为库,但无法“构建”。我作为应用程序重试 - 但我无法为其创建故事书,因为它不是一个库。

和平之路是什么?

nrwl angular-elements nrwl-nx

5
推荐指数
1
解决办法
1874
查看次数

将 Angular 元素捆绑到单个文件中

我正在使用Angular Element (版本 13)构建一个 Web 组件,我有一个关于捆绑的问题。

是否可以以所有 js 包(main.js、runtime.js 和 polyfills.js)以及 /assets 文件夹中的 css 和 svg 图标都位于单个 js文件中的方式构建 Web 组件在最后?

我现在正在做的是 ng build --configuration element --output-hashing none && node build.js在 build.js 包含的地方运行:

const fs = require('fs-extra');
const concat = require('concat');

(async function build() {
  const files = [
    './dist/runtime.js',
    './dist/polyfills.js',
    './dist/main.js'
  ];

  await concat(files, './dist/webcomp-ecar-friendly-accommodations.min.js');
  await fs.remove('./dist/runtime.js')
  await fs.remove('./dist/polyfills.js')
  await fs.remove('./dist/main.js')
})();
Run Code Online (Sandbox Code Playgroud)

有没有办法将 css 文件和 /assets 也捆绑在同一个 js 包中?我确实知道它是在其他应用程序中使用 Webpack 完成的,但我不确定如何使用 Angular CLI 来完成此操作。

任何意见将不胜感激!

web-component webpack angular-cli angular angular-elements

5
推荐指数
1
解决办法
2563
查看次数