每当更新服务中的值时,我都会尝试从服务中获取值到制表符组件,如果可能,请将 cartNumber in cart.service.ts 绑定到 cartNumber in tabs.ts 即可。我的用例是:
点击“添加到购物车”按钮,中间的“购物车”标签应将徽章编号更新为cartNumber中相应的商品编号
cart.service.ts
@Injectable()
export class CartService {
public cartNumber: number;
constructor() {}
getCartItems() {
// returns list of items in shopping cart
}
addToCart(id, quantity){
// updates the shopping cart with new items
}
tabs.ts
import { CartService } from '../cart/cart.service';
@Component({
templateUrl: 'tabs.html'
})
export class TabsPage {
// this tells the tabs component which Pages
// should be each tab's root Page
tab1Root: any = HomePage;
tab2Root: any = CartPage;
tab3Root: any = ProfilePage;
public cartNumber: number;
constructor() {
}
}
那么将 cart.service cartNumber 值“绑定”到我的标签组件的cartNumber 的最佳方式是什么,以便每当有更改时值都会更新 cart.service cartNumber ?
我尝试了ngOnChanges,但它似乎不起作用。在这种情况下,EventEmitters似乎不起作用。或者我对任何这些方法的理解都是错误的。
答案 0 :(得分:4)
感谢Suraj Rao建议使用Ionic 2 Events
我无法找到如上所述在不同组件之间进行通信的方法,这确实完成了这项工作。一个非常干净和优雅的解决方案,无需使用$ watch或通过注入运行$ scope,如角度1。
答案 1 :(得分:0)
在tabs.ts
内,您可以使用以下代码在CartService
构造函数中注入TabsPage
的实例:
import { CartService } from '../cart/cart.service';
@Component({
templateUrl: 'tabs.html'
})
export class TabsPage {
// this tells the tabs component which Pages
// should be each tab's root Page
tab1Root: any = HomePage;
tab2Root: any = CartPage;
tab3Root: any = ProfilePage;
public cartNumber: number;
constructor(cartService : CartService ) {//It will be automatically injected by the Ionic framework
}
//Somewhere in your code you can do this :
this.cartService.addToCart(/*parameters*/);
}
为了完成这项工作,请确保{app}已在app.module.ts文件中列为提供商。