标签: angular-elements

角度 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
查看次数

Angular 元素与 Angular 库?

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

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

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

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

那可能吗 ?

web-component angular angular-library angular-elements

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

角度元素 - 将复杂的输入传递给我的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
查看次数

集成的Web组件在Angular 6中使用了错误的base-href

我刚刚使用Angular 6创建了我的第一个Web组件.一切正常,直到我尝试将Web组件集成到现有应用程序中:

集成了Web组件的应用程序(https://www.example.com):

<script type="text/javascript" src="https://component.example.com/html-imports.min.js"></script>
<link rel="import" href="https://component.example.com/element.html">
<my-web-component uuid="2342-asdf-2342-ffsk"></my-web-component>
Run Code Online (Sandbox Code Playgroud)

我的Web组件index.html不包含base-href.

浏览器现在尝试加载Web组件的资源:

https://www.example.com/assets/i18n/de_CH.json
Run Code Online (Sandbox Code Playgroud)

代替

 https://component.example.com/assets/i18n/de_CH.json
Run Code Online (Sandbox Code Playgroud)

当我尝试在构建期间添加base-href时,会导致:

ng build --configuration=development --base-href https://component.example.com/

Cannot read property 'startTag' of null          
TypeError: Cannot read property 'startTag' of null
    at IndexHtmlWebpackPlugin.<anonymous> (/home/www-data/.../node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/index-html-webpack-plugin.js:147:62)
    at Generator.next (<anonymous>)
    at fulfilled (/home/www-data/.../node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/index-html-webpack-plugin.js:4:58)
Run Code Online (Sandbox Code Playgroud)

任何帮助都非常感谢,我的想法已经不多了.

web-component angular-cli angular angular6 angular-elements

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

我可以在单个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
查看次数

Angular Elements 之间的共享数据

我正在研究 Angular Elements 并考虑将我们的 Angular 组件生成为 Angular Elements,以便可以在 Angular 应用程序之外使用。

假设我有一个 Angular 4 应用程序,它导入两个不同的 Angular Elements(内置于 Angular 7)并将它们呈现在同一页面上,然后我在我的 Angular 4 组件中实例化一个服务。该服务包含我想传递到我的 Angular Elements 中的数据,因为 Web 组件只接受字符串作为属性(输入),有没有什么好的方法可以在服务实例之间共享数据/将服务实例传递到 Angular Elements 中?

angular angular-elements angular7

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

Angular 元素作为反应形式的原生形式控件

我正在尝试将表单控件导出为 Angular 元素(Web 组件),并将其用作本机输入元素,以便它可以与 Angular 反应式表单或与本机 html 输入一起使用的类似库一起使用。

波纹管代码在作为模块中的角度组件导出时起作用。当我将它导出为 Web 组件并尝试以反应形式使用它时,我遇到了问题。

此代码是使用 Angular 7.1 框架编写的。

组件模板

<input ngDefaultControl value="value" />
Run Code Online (Sandbox Code Playgroud)

组件代码:

@Component({
  selector: 'cns-text-input',
  templateUrl: './text-input.component.html',
  styleUrls: ['./text-input.component.scss'],
  providers: [ {
    provide: NG_VALUE_ACCESSOR,
    useExisting:  forwardRef(() => TextInputComponent),
    multi: true
  }]
})
export class TextInputComponent implements ControlValueAccessor,     AfterViewInit {

  @ViewChild(DefaultValueAccessor) valueAccessor:     DefaultValueAccessor;

  public ngAfterViewInit() {
    console.log('value accessor', this.valueAccessor);
    console.log(this);
  }

  public writeValue(obj: any): void {
    this.valueAccessor.writeValue(obj);
  }
  public registerOnChange(fn: any): void {
    this.valueAccessor.registerOnChange(fn);
  }
  public registerOnTouched(fn: any): void {
    this.valueAccessor.registerOnTouched(fn);
  } …
Run Code Online (Sandbox Code Playgroud)

angular angular-elements

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

在 Internet Explorer 11 中使用 Angular Elements 的推荐方法

寻找有关如何使用可在其他浏览器上工作的 Angular Elements 的指南,尤其是 Internet Explore 11。

到目前为止,遵循使用 ngDoBootstrap 来定义自定义元素(Angular Element)的推荐约定。它仅适用于 Chrome,但在 IE 中,元素标签在 DOM 中可见,但在浏览器上不显示任何内容。架构如下:组件、服务、管道……都被分成模块。

然后使用 customElements.define() 定义一个父组件。一旦这在 DOM 中应用,诸如单击事件更改检测之类的操作就可以在 chrome(当前版本:72.0.3626.121)中很好地工作,但在 IE 中没有任何显示。我花了几个小时研究不同的方法让它在 IE 中工作。我查看了这里提供的一些问题和答案,特别是使用 polyfills 但没有成功。

然后,我尝试按照 parent > child 的顺序一次定义一个组件,但再次遇到了不同的问题,其中 IE 开始抛出脚本错误,其中一个特别是与 zone.js 和 vendor.js(但不是在 chrome 中)有关。这样做后,我能够看到该元素,但操作和更改检测不起作用。

在这里尝试了这种方法但后来开始遇到依赖注入错误。到目前为止,一个问题会导致另一个问题。

选择使用 AngularElements 的原因是尝试将其与使用不同技术堆栈编写的现有项目集成。

polyfills internet-explorer-11 angular angular-elements

6
推荐指数
2
解决办法
5606
查看次数

Angular Element无法解析另一个角度项目中的route(?),而是在网站上仅显示“ &lt;router-outlet&gt; &lt;/ router-outlet&gt;”

以下起点

我们有一些有角度的前端微服务,现在我们希望将它们整合到一个应用程序中。我们正在尝试使用Angular-Elements方法,并且已导出其中一个产生了巨大的JS文件的微服务。

问题

当我们在“将其放在一起”项目中包含角度元素时,仅在dom中包含“ router-outlet”标签,而不会呈现任何html。

自定义元素:

app.module.ts:

        import {NgModule, Injector} from '@angular/core';

    import {AppRoutingModule} from './app-routing.module';
    import {AppComponent} from './app.component';

    import {PhoneModule} from "./features/phone/phone.module";
    import {createCustomElement} from '@angular/elements';
    import {Router} from '@angular/router';

    @NgModule({
      declarations: [
        AppComponent,
      ],
      imports: [
        AppRoutingModule,
        PhoneModule,
      ],
      entryComponents: [AppComponent],
    })
    export class AppModule {

      constructor(private injector: Injector, private router: Router) {
        this.router = router;
      }

      ngOnInit() {
        this.router.initialNavigation();
      }

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

app-routing.module.ts:

import …
Run Code Online (Sandbox Code Playgroud)

web-component angular angular-elements

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

如何在 angular 应用程序和 angular 元素之间共享服务

我有一个升级到 angular 9 的 angular 应用程序,我在其中使用了 angular 元素,它也升级到了 angular 9。我有一个服务模块(angular 9),我正在我的 angular 应用程序中导入它。我的 angular 元素也导入了相同的服务。我希望在我的 angular 应用程序和 angular 元素之间共享该服务的单个实例。Angular 9 提供了新的服务注入选项,现在称为“平台”。根据角度文档https://next.angular.io/api/core/Injectable

'platform' :页面上所有应用程序共享的特殊单例平台注入器。

我将我的服务更改为从根注入到平台级别。但我仍然看到我的服务的两个实例,一个在我的应用程序中,另一个在 angular 元素中。

@Injectable({providedIn: '平台' })

如何在我的应用程序和 angular 元素之间共享我的服务的单个实例。

angular-services angular angular-elements angular9

6
推荐指数
0
解决办法
213
查看次数