angular - 有没有办法根据从这些选项卡的内容提交的表单在角度材料选项卡之间切换?
问题描述
我正在开发一个有角度的网络应用程序。我需要根据在这些选项卡的内容中执行的操作来控制我的角度选项卡。例如,我有以下选项卡:项目信息、变化、定价、库存等,这些选项卡包含由角度组件加载的表单。当项目信息表单成功提交时,我想自动切换到变体选项卡。此外,在保存项目信息之前,用户不应该能够切换到变体选项卡。
<mat-tab-group class=" navbar-default panel-piluku nav nav-justified nav-wizard nav-progression" >
<mat-tab class="outbound_link" role="button" title="Item Info" label="Item Info">
<add-product-information></add-product-information>
</mat-tab>
<mat-tab class="outbound_link" role="button" title="Variations" label="Variations">
<add-product-variation></add-product-variation>
</mat-tab>
<mat-tab class="outbound_link" role="button" title="Pricing" label="Pricing">
<add-product-pricing></add-product-pricing>
</mat-tab>
<mat-tab class="outbound_link" role="button" title="Inventory" label="Inventory">
<add-product-stock></add-product-stock>
</mat-tab>
<mat-tab class="outbound_link" role="button" title="Images" label="Images">
<add-product-images></add-product-images>
</mat-tab>
<mat-tab class="outbound_link" role="button" title="Locations" label="Locations">
<add-product-locations></add-product-locations>
</mat-tab>
</mat-tab-group>
constructor(private route: ActivatedRoute, private productsService: ProductsService, private router: Router, public dialog: MatDialog, private suppliersService: SuppliersService) { }
submitProduct = function(){
this.product["sku"] = this.sku;
this.product["alternate_sku"] = this.alternate_sku;
this.product["product_name"] = this.product_name;
this.product["product_description"] = this.product_description;
this.product["category"] = this.category_id;
this.product["price_per_unit"] = this.price_per_unit;
this.product["reorder_level"] = this.reorder_level;
this.product["discontinued"] = this.discontinued;
this.product["cost"] = this.cost;
this.product["default_price"] = this.default_price;
this.product["best_price"] = this.best_price;
this.product["medium_price"] = this.medium_price;
this.product["brand"] = this.brand;
this.product["upc"] = this.upc;
this.productsService.addProduct(this.product).subscribe((data)=>{
````Here the tab should switch```````
});
<form action="submitProduct()" id="item_form" class="form-horizontal" method="post" accept-charset="utf-8">
<input type="hidden" name="ecommerce_product_id" value="" />
...
...
...
<div class="form-actions">
<input type="submit" name="submitf" value="Save" id="submitf"
(click)="submitProduct()" class="submit_button floating-button btn btn-lg btn-primary" />
</div>
</div>
</div>
</form>
解决方案
可以selectIndex
使用mat-tab-group
. 要更改 tabSelected ,请将其设置为您需要的选项卡索引,然后选项卡将更改为设置的索引。
为此,我只需定义一个服务并使用行为主题。我的服务定义:
my-tab.service.ts
:
@Injectable()
export class MyTabService{
tabSubject : BehaviorSubject<number> = new BehaviorSubject<number>(0);
constructor(){}
setTabSelected(tabIndex : number){
this.tabSubject.next(tabIndex);
}
getTabSelected() {
this.tabSubject.asObservable();
}
}
现在getTabSelected()
在您的选项卡组件中订阅,您将tabIndex
在订阅响应中获得。
考虑到您的标签组件是my-tab.component.ts
,
@Component({...})
export class MyTabComponent {
selectdIndex : number = 0;
constructor(private _myTabService : MyTabService){}
ngOnInit(){
this.-myTabService.getTabSelected().subscribe((tabIndex : number) =>{
this.selectedIndex = tabIndex;
})
...
}
...
}
在模板中使用 selectedIndex :
<mat-tab-group class=" navbar-default panel-piluku nav nav-justified nav-wizard nav-progression" [selectedIndex]='selectedIndex'>
<mat-tab class="outbound_link" role="button" title="Item Info" label="Item Info">
<add-product-information></add-product-information>
</mat-tab>
<mat-tab class="outbound_link" role="button" title="Variations" label="Variations">
<add-product-variation></add-product-variation>
</mat-tab>
<mat-tab class="outbound_link" role="button" title="Pricing" label="Pricing">
<add-product-pricing></add-product-pricing>
</mat-tab>
<mat-tab class="outbound_link" role="button" title="Inventory" label="Inventory">
<add-product-stock></add-product-stock>
</mat-tab>
<mat-tab class="outbound_link" role="button" title="Images" label="Images">
<add-product-images></add-product-images>
</mat-tab>
<mat-tab class="outbound_link" role="button" title="Locations" label="Locations">
<add-product-locations></add-product-locations>
</mat-tab>
</mat-tab-group>
有关 mat 选项卡组中的输入和事件的更多信息,请参阅:Mat Tab
推荐阅读
- spring-boot - 如何使用开箱即用的 Spring Boot GraphQL Kickstart 标量类型?找不到用于对象字段的类型名
- angular - 在 Angular 10 中使用异步服务方法作为工厂提供者
- r - 如何创建 ggplots 列表?
- javascript - 以灵活的高度同步滚动导航和内容
- powerbi - Power BI Azure Maps Visual 动态参考层?
- wordpress - WordPress - 如何在循环中将变量与 Timber (TWIG) 连接起来
- nginx - 如何使用女服务员为烧瓶应用程序正确配置 NGNIX for SSL
- java - 如何在android webview中启用后退按钮
- arrays - 似乎无法让我的刽子手游戏在 C 中运行?
- javascript - 通过另一个数组元素过滤一个对象数组