当前位置: 首页 > 知识库问答 >
问题:

角度2:组件交互,可选输入参数

姚凯歌
2023-03-14

我有一个实现,其中父组件希望通过使用子组件上可用的< code>@Input参数将某些数据传递给子组件。然而,这种数据传输是可选的,父节点可能会也可能不会按照要求传递它。一个组件中可以有可选的输入参数吗?我在下面描述了一个场景:

 <parent>
    <child [showName]="true"></child> //passing parameter
    <child></child> //not willing to passing any parameter
</parent>



//child component definition
@Component {
    selector:'app-child',
    template:`<h1>Hi Children!</h1>
          <span *ngIf="showName">Alex!</span>`
}


export class child {

    @Input showName: boolean;

    constructor() { }

}

共有3个答案

关飞翔
2023-03-14

这里有两个选项。

1)您可以在孩子身上使用*ngIF,以防孩子在其Input为空时不需要显示。

 <parent>
    <child *ngIf="true" [showName]="true"></child> //passing parameter
    <child></child> //not willing to passing any parameter
</parent>

2)如果在没有任何输入的情况下显示子变量,您可以使用修改后的setter来检查输入变量的存在情况

在孩子中:

private _optionalObject: any;
@Input()
set optionalObject(optionalObject: any) {
    if(optionalObject) this._optionalObject = optionalObject;
}
get optionalObject() { return this._optionalObject; }
梁丘扬
2023-03-14

默认情况下,输入值是可选的。您的代码仅在尝试访问未实际传递的输入的属性时才会失败(因为这些输入是未定义的)。

您可以实现OnChanges或使输入成为setter而不是属性,以便在实际传递值时执行代码。

export class child {

    @Input set showName(value: boolean) {
      this._showName = value;
      doSomethingWhenShowNameIsPassed(value);
    }

    constructor() { }
}
龙玄天
2023-03-14

您可以使用(?)操作员如下

import {Component,Input} from '@angular/core';
@Component({
    selector:'child',
    template:`<h1>Hi Children!</h1>
          <span *ngIf="showName">Alex!</span>`
})


export class ChildComponent {

    @Input() showName?: boolean;

    constructor() { }

}

使用子组件的父组件将是

@Component({
  selector: 'my-app',
  template: `
    <div>
      <h2>Hello {{name}}</h2>
      <child [showName]="true"></child>
      <child ></child>
    </div>
  `,
})
export class App {
  name:string;
  constructor() {
    this.name = 'Angular2'
  }
}

现场演示

 类似资料:
  • 是否可以在 Angular 2 路由中具有可选的路由参数?我在RouteConfig中尝试了Angular 1.x语法,但收到以下错误: “原始异常:路径“/ user /: id ?“包含”?

  • 我有一个ionic 2应用程序,我一直在使用本地数据进行测试。现在,我正试图向我的api发出一些Ajax请求以获取数据。 在我的文件,我正在这样定义我的组件: 然后,我的文件的定义如下: 然后,最后,我用我的文件初始化我的注册视图: 我预期的结果是,在初始化我的注册视图时,将注入。因此,它的构造函数将运行,这将触发构造函数中的函数。然后,我应该在浏览器网络选项卡中看到一个网络调用。 但是,我得到了

  • 我想创建一个具有不需要值的属性的组件。例如,而不是像这样的东西:(我现在有) 或 我宁愿有: 因此组件本身必须查看属性editMode是否存在。当我有很多这样的属性时,这个看起来会干净很多。我没有看到任何关于如何做到这一点的文档。可行吗?

  • 基于Angular 2的文档,您可以使用@Input轻松地将数据从一个组件传递到另一个组件。 例如,我可以这样设置父对象: 然后按如下方式获取子组件中的数据: 很明显,将传递给父组件的模板(当然是在子选择器中),并将它们处理到子组件中。 但问题是。 我的子组件DOM元素(在本例中

  • 问题内容: 我有一个简单的形式,像这样: 与我的控制器如下: 我想做的是在提交后清除文本输入,因此我只需清除模型值: 除了现在,因为“需要”表单输入,所以在表单输入周围出现了红色边框。这是正确的行为,但不是我在这种情况下想要的……所以,我想清除输入,然后模糊输入元素。这导致我: 现在,我知道从这样的控制器修改DOM在Angular文档中是很陌生的-但是还有更多的Angular方式可以做到这一点吗?

  • 我正在学习Selenium WebDriver,并在一个公共网站上测试我的技能。问题是,我无法使用Selenium WebDriver Java与具有role='combobox'的输入元素交互。我需要为计算器的第一个元素交互(选择2d选项)(“Кааааааааааааааааааачааааааа”文本旁边的组合框)。Firefox显示了它的代码: 当我尝试为它单击或发送键时,它会写入元素(s