数组推送在我的Angular 2组件中不起作用

时间:2017-12-08 12:43:07

标签: javascript angular typescript ionic-framework

我有一个这样的组件

export class DishComponent implements OnInit{

    @Input() dishID : number
    @Input() showList: boolean = false;
    selectedDishes : Array<any> = [];
    dishSubscribe : Subscription;
    totalDishprice : number;
    dish : any;

    constructor(
        private dishComponentService : DishComponentService,
        private dishService : DishService
    ) {
           this.dishSubscribe = this.dishService.dishItems$.subscribe( data =>{
           this.totalDishprice = data.map( dish => Number(dish.price)).reduce((prev, next) => prev + next, 0);
              console.log(this.totalDishprice);
           })
      }

      ngOnInit(){
          this.dishComponentService.getDishByID(this.dishID).subscribe( response => {
             console.log(response);
             this.dish = response.data[0];
        },(err) =>{
              console.log(err);
        })
     }


     checkDish(dish,isChecked){
         if(isChecked){
            this.selectedDishes.push(dish);
            //this.selectedDishes = [...this.selectedDishes, dish];
            this.dishService.addDish(this.selectedDishes);
         }else{
            let index = this.selectedDishes.findIndex(x => x.id == dish.id);
            this.selectedDishes.splice(index,1);
            this.dishService.addDish(this.selectedDishes);
         }
         console.log(this.selectedDishes);
     }
}

,视图就是这样,

 <ng-container *ngIf="!showList">
     <ion-item class="order-third-dish horizontal-item checkbox-tag">
       <ion-label><span>{{dish?.name}}</span></ion-label>
       <ion-checkbox class="myinput large custom" (ionChange)="checkDish(dish,$event.checked)"  [checked]="isInArray(dish?.id)">
       </ion-checkbox>
     </ion-item>
 </ng-container>

 <ng-container *ngIf="showList">
     <h2 class="item-title">{{dish?.name}}</h2>
      <ion-note class="item-time" item-right>{{dish?.price | currency : 'INR' : true : '.2-2'}}</ion-note>
     <ion-checkbox class="dish_check" (ionChange)="checkDish(dish,$event.checked)" [checked]="isInArray(dish?.id)">
     </ion-checkbox>
 </ng-container>

在这里,我正在做的是,在复选框中的每次检查中更新selectedDishes数组。但问题是push无法在checkDish函数中运行。 this.dishService.addDish(this.selectedDishes);我在这里只是将它添加到一个observable中。

1 个答案:

答案 0 :(得分:1)

你在盘子里有对象 {id: "1", name: "Omelettes", price: "35.00", image: false, …}喜欢这个

所以你有一个选定菜的数组然后你正在推动一个物体 如果您想要访问该菜肴名称并将其推送到所选菜肴,那么您必须这样做...

a = [1,2,3,4,{id:1,name:"aarsh"}] 如果你想访问名称,那么

a[4].name然后你得到了#34; aarsh&#34;作为输出。

所以在这里你得到dish = {id: "1", name: "Omelettes", price: "35.00", image: false, …} 那么你可以这样做dish.name,你会得到煎蛋卷