我有一个卡片列表组件,它应该显示卡片组件或卡片编辑组件的元素,具体取决于 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);
}
}
我添加了另一个答案,因为这是另一个解决方案。
你能做的就是做一个双向绑定,比如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>
你走错了路:给你的条件一个变量,比如说 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);
}
}
我将创建一个“包装器”组件,用于保存卡片的编辑和只读版本。它将具有访问者的输入、编辑点击的属性和一个名为函数的函数,该函数接受布尔值。在函数中,您将编辑点击设置为真/假。所以像这样的事情:
<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一样