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

角度 ng如果使用条件的 @Output() 结果

都才俊
2023-03-14

我有一个卡片列表组件,它应该显示卡片组件或卡片编辑组件的元素,具体取决于 wasEditClicked 上的卡片组件是真还是假。

卡片列表组件的模板如下所示:

<div class="loop" *ngFor="let guest of guests">
    <div *ngIf="true;else elseBlock">
        <app-guest-card [guest]="guest"></app-guest-card>
    </div>
    <ng-template #elseBlock>
        <app-guest-card-edit [guest]="guest"></app-guest-card-edit>
    </ng-template>
</div>

我想将 ngIf 条件绑定到 wasEditClicked 布尔值。

我的卡组件(与上面显示的卡列表组件不同)如下所示:

export class GuestCardComponent implements OnInit {

  @Input() public guest: Guest;
  @Output() public wasEditClicked = new EventEmitter<boolean>();

  constructor() { }

  ngOnInit() {
  }

  onEdit() {
    this.wasEditClicked.emit(true);
  }

}

共有3个答案

韦高谊
2023-03-14

我添加了另一个答案,因为这是另一个解决方案。

你能做的就是做一个双向绑定,比如ngModel。

以下是您的操作方法:

js prettyprint-override">let emitValue = false;
@Output() public emitChange = new EventEmitter<boolean>();

@Input() get emit() { return this.emitValue; }
set emit(value: boolean) { this.emitValue = value; this.emitChange.emit(this.emitValue); }

现在在你的HTML中,你可以做的是

<app-guest-card [guest]="guest" [(emit)]="showIt"></app-guest-card>
武嘉祥
2023-03-14

你走错了路:给你的条件一个变量,比如说 showIt

<div class="loop" *ngFor="let guest of guests">
    <div *ngIf="showIt;else elseBlock">
        <app-guest-card [guest]="guest" (onEdit)="showIt = $event"></app-guest-card>
    </div>
    <ng-template #elseBlock>
        <app-guest-card-edit [guest]="guest" (onEdit)="showIt = $event"></app-guest-card-edit>
    </ng-template>
</div>

然后在单击 :

export class GuestCardComponent implements OnInit {
  @Input() public guest: Guest;
  @Output() public wasEditClicked = new EventEmitter<boolean>();

  constructor() { }

  ngOnInit() {}

  onEdit() {
    this.wasEditClicked.emit(true);
  }

}
宓茂才
2023-03-14

我将创建一个“包装器”组件,用于保存卡片的编辑和只读版本。它将具有访问者的输入、编辑点击的属性和一个名为函数的函数,该函数接受布尔值。在函数中,您将编辑点击设置为真/假。所以像这样的事情:

<div>
 <app-guest-card *ngIf="editClicked;else #elseBlock" [guest]="guest" 
  (wasEditClicked)="aFunction($event)">
 </app-guest-card>
 <ng-template #elseBlock>
    <app-guest-card-edit [guest]="guest"></app-guest-card-edit>
 </ng-template>
</div>

然后在您的顶级组件中,它将是

<div *ngFor="let guest of guests">
  <app-wrapper [guest]="guest"></app-wrapper>
</div>

这使得一个组件只需要考虑一张访客卡,而不是整个列表。

 类似资料:
  • 问题内容: 你如何用ng- repeat做这样的事情?我将使用文档中的示例,该示例将一个包含2个朋友的数组初始化为一个数组,如果我只想对所有26岁以上的朋友重复一次该怎么办? 问题答案: 创建一个自定义过滤器。 HTML: 和 JS:

  • 我有元素,这些元素有一个绑定到复选框的语句。如果我物理地选中该复选框,将按预期响应。但是,如果我通过JavaScript选中或取消选中复选框,则复选框会按预期被选中或取消选中,但没有响应。这是正常工作吗?有没有更好的办法做到这一点? 下面是我的代码示例:“[]”=“<>” HTML-第1部分 [li id=“HomeButton”ng-if=“HomeChecked!=true”onclick=“

  • 问题内容: 我有一个视图,其中父div上具有ng-if,而某些子元素上具有ng-show。嵌套在带有ng-if的元素下时,ng- show似乎无法正常工作。这是Angular错误还是我做错了什么? 见这个矮子。 HTML: JavaScript: 谢谢, 安迪 问题答案: 与指令不同,它 创建了一个新的作用域* 。 * 因此,当您在内部编写内容时,您是在子范围而非主范围上设置属性。 要解决此问题,

  • 问题内容: 我正在使用ng-repeat使用jQuery和TB构建手风琴。出于某种原因,这在进行硬编码时可以很好地工作,但是在ng-repeat指令内部时无法触发点击。 我以为问题出在jQuery,而不是事实之后绑定的元素。因此,我认为与其在页面加载时加载脚本,不如在返回数据时在.success上加载函数会更好。不幸的是,我不知道该如何做。 测试页 :http : //staging.conver

  • 我的ts文件中有一个函数: 我想要的是在我的HTML中返回这个函数的结果。我可以调用html中的函数,如: 但每次单击任何位置时,它都会更改值,而我会得到一个错误:

  • 问题内容: 给定使用AngularJS 1.2 rc3的测试用例:http : //plnkr.co/edit/MX6otx(以下重复) 1。 2。 问题: 为什么1不起作用? 1个应该工作吗? 为什么2起作用? 2应该工作吗? 我可以依靠2来进行AngularJS的将来更新吗? 问题答案: 为什么1不起作用?: 因为ngIf定义了自己的作用域,它通常是从其父作用域继承的(就像ngRepeat一样