【问题标题】:Passing a variable over to a private npm package将变量传递给私有 npm 包
【发布时间】:2021-12-14 18:59:30
【问题描述】:

我创建了一个私有 npm 包,我可以使用 html 中的此代码在我的其他应用程序中运行:

<app-header-name></app-header-name>

这是它运行的 npm 包中的代码:

import { Component, OnInit } from '@angular/core';
@Component({
  selector: 'app-header-name',
  templateUrl: './header.component.html',
  styleUrls: ['./header.component.css'],
})
export class HeaderComponent implements OnInit {
  public blob: any;
  constructor() {}

  ngOnInit(): void {
    console.log(this.blob);
  }
}

这是 npm 包中的 html 代码:

<div class="row">
  <div class="col d-flex justify-content-center">
    Click the button to download the template
  </div>
</div>

我的问题是,如何将我的应用程序中的变量传递到 npm 包中的变量 blob 中?我尝试了以下方法,它只是控制台记录了“未定义”:

<app-header-name blob="bazinga"></app-header-name>

另外,有没有办法从 npm 包传回数据?例如,它将接收字符串 blob 变量,然后在其中添加另一个单词并将其传递回主应用程序?

【问题讨论】:

  • 是 Angular 组件还是自定义元素 web 组件?
  • @abhishek khandait 我认为这是一个角度组件

标签: javascript node.js angular typescript npm


【解决方案1】:

您需要在组件中添加一个输入。

import { Component, EventEmitter, OnInit, Input } from '@angular/core';
@Component({
  selector: 'app-header-name',
  templateUrl: './header.component.html',
  styleUrls: ['./header.component.css'],
})
export class HeaderComponent implements OnInit {
  @Input() blob: any;

  @Output() somethingOut = new EventEmitter();

  ngOnInit(): void {
    console.log(this.blob);
  }

  sendToParent() {
    this.somethingOut.emit({ data: 'Hello from child component '});
  }
}

传入一个字符串

<app-header-name blob="bazinga"></app-header-name>

从父级传入一个变量

<app-header-name [blob]="someVarOnTheParent"></app-header-name>

传入和传出一个变量 父组件需要一个函数来接收数据。 请注意$event 是必需的,因为孩子正在传递数据

<app-header-name [blob]="someVarOnTheParent" (somethingOut)="parentFunc($event)"></app-header-name>

【讨论】:

  • 非常感谢!我还可以问,如果我在 npm 包组件上有一个变量,我如何将它传递回主应用程序(父级)?我正在考虑在组件上有一个按钮,当按下它时,它将数据发送回父应用程序。这可能吗?
  • 如果需要,请使用@Output。如果它的属性相同,您可以通过两种方式数据绑定现有属性:ofirrifo.medium.com/…
  • @Marcus Cantu 谢谢。我会发回一个不同的变量。但是我将如何在父应用程序中接收数据?目前我只是在 html 中引用它 - - 我是否在组件文件中添加一些内容来接收它?谢谢
  • 是的,你必须添加一些特别的东西:angular.io/guide/inputs-outputs。有你需要的文档,但基本上它看起来像这样: 父母:&lt;app-header-name blob="bazinga" (ARBITRARY_OUTPUT_NAME)="functionToCall($event)"&gt;&lt;/app-header-name&gt; 孩子:... class HeaderComponent { .... @Input() blob: any; // dont use any..... @Output() ARBITRARY_OUTPUT_NAME= new EventEmitter&lt;PROP_TYPE_HERE&gt;(); ... someFunction(){ this.ARBITRARY_OUTPUT_NAME.emit(value); } } 在评论中很难正确格式化,但希望你能明白。
  • 我也用输出选项更新了我的答案。
猜你喜欢
  • 2022-06-17
  • 2017-06-30
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 2018-01-11
  • 2019-10-07
  • 2010-12-18
相关资源
最近更新 更多