我在理解输入/输出时遇到一些困难,如何在单击按钮时将数据从组件传递到另一个组件。
现在我有AppComponent
(父母)和BasketComponent
(孩子)。
appComponent.html的代码
<div class="column small-2 navigation-menu-right">
<span class="basket"><li><a (click)="isClassVisible = !isClassVisible;" href="#"><img src="/assets/img/basket24.png" title=""/></a></li></span>
</div>
<basket-component [isClassVisible]="isClassVisible"></basket-component>
来自appComponent.ts的代码
export class App {
name = 'WebShop Angular2 App';
url = '';
isClassVisible: boolean = false;
constructor(public appState: AppState) {
}
}
如您所见,我正在尝试将isClassVisible
属性传递给购物篮组件。当您点击appComponent
中的购物篮按钮时,它应该将此值发送给子basketComponent
。
来自basketComponent.html的代码
<aside class="aside" [ngClass]="{'aside-active': isClassVisible}">
我正在使用ngClass
,因此如果isClassVisible
为真,则应添加aside-active
类。
来自basketComponent.ts的代码
@Injectable()
export class BasketComponent {
@Input() isClassVisible: boolean;
constructor() {
}
}
我已经在一个组件中测试了我的代码,在这里它可以工作,但是想要拆分它,所以我有一个basketComponent
。
希望有人能告诉我如何正确使用输入。
更新
<aside class="aside" [ngClass]="{'aside-active': isClassVisible }">
<div class="products_in_basket">
<div class="product_header">
product header
</div>
<div class="product_content">
<span class="product_quantity">4 stk</span>
<span class="product_price">1999</span>
</div>
</div>
<div class="products_in_basket">
</div>
<div class="price_in_basket">
<ul>
<li>price here</li>
<li>total number</li>
</ul>
</div>
<div class="">
<ul>
<button>Button</button>
</ul>
</div>
</aside>
出于某种原因,当在顶部标记上使用ngClass
时它不起作用,就像我所做的那样。
我是否会这样做:
<aside class="aside">
<div class="products_in_basket" [ngClass]="{'aside-active': isClassVisible }">
它有效,但我仍然需要显示/隐藏整个aside
。我们还尝试使用div
代替aside
,这会产生相同的结果。
答案 0 :(得分:2)
工作演示 - https://plnkr.co/edit/wvEMRl5jP1zeyi6TDJFr?p=preview
valid()
//@Injectable() //<------This is not required
export class BasketComponent {
@Input() isClassVisible: boolean;
constructor() {
}
}