离子2 - navPush由于某种原因不起作用

时间:2017-07-23 06:46:41

标签: javascript angularjs ionic-framework ionic2

navPush停止工作,我真的不知道为什么。它不能与this.nav.push()一起使用navPop。我试过更多按钮,按钮,我真的不明白为什么不工作。

html文件

<ion-header>
  <ion-toolbar color="danger">
    <ion-title>
      {{ nombreLista }}
    </ion-title>
    <ion-buttons end
                 [navPush]="home"
                 [navParams]="DataLista">
      <button ion-button icon-only color="white">
        Home <ion-icon name="ios-arrow-forward"></ion-icon>
      </button>
    </ion-buttons>

  </ion-toolbar>
</ion-header>

<ion-content padding>

  <ion-list *ngFor="let lista of listaFinal">
    <ion-list-header *ngIf="lista.articulos.length > 0"> Pasillo {{lista.pasillo}} </ion-list-header>
    <ion-item-sliding *ngFor="let articulo of lista.articulos">
      <ion-item>{{articulo}}</ion-item>
      <ion-item-options  side="right">
        <button ion-button expandable
                (click)="onDelete(articulo)"
                color="danger"
                ><ion-icon name="md-trash"></ion-icon>Borrar</button>
      </ion-item-options>
    </ion-item-sliding>
  </ion-list>

  <button  (click)="onPush()">
    <ion-icon name="add"></ion-icon>
  </button>

  <ion-fab bottom right>
    <button  ion-fab mini
             color="danger"
             [navPush]="elegirItem"
             [navParams]="DataLista">
      <ion-icon name="add"></ion-icon>
    </button>
  </ion-fab>
</ion-content>

ts文件

import {Component, OnInit} from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
import {HomePage} from "../home/home";
import { ElegiritemsPage } from "../elegiritems/elegiritems";


@Component({
  selector: 'page-lista-terminada',
  templateUrl: 'lista-terminada.html',
})
export class ListaTerminadaPage implements OnInit{
  home=HomePage;
  elegirItem = ElegiritemsPage;
  nombreLista;
  listaFinal : {pasillo: number, articulos:string []}[];
  DataLista;



  constructor(public navCtrl: NavController, public navParams: NavParams) {
  }


  ngOnInit(){
    this.DataLista = this.navParams.data;
    this.listaFinal = this.navParams.get('listaOrden');
    this.nombreLista = this.navParams.get('listaNombre');
    this.DataLista.listaActiva = this.listaFinal;
  }


  //recibe un articulo y recorre el arreglo, en caso de ser iguales, se elimina

  onDelete(articulo) {
    for (var i = 0; i < this.listaFinal.length; i++) {
      for (var x = 0; x < this.listaFinal[i].articulos.length; x++) {
        if (this.listaFinal[i].articulos[x] === articulo) {
          this.listaFinal[i].articulos.splice(x, 1)
        }
      }
    }
    this.DataLista.listaActiva = this.listaFinal;
  }
  onPush(){
    console.log('jose');
    this.navCtrl.push(this.elegirItem);

  }
}

ElegirItems.html

<ion-header>
  <ion-toolbar color="danger">
    <ion-title>
    {{nombreLista}}
  </ion-title>

    <ion-buttons end>
      <button ion-button
              clear color="white"
              (click)="onOrganizaLista()"
              [navPush]="listaTerminada"
              [navParams]="DataLista">LISTO</button>
    </ion-buttons>
  </ion-toolbar>
</ion-header>


<ion-content padding class="backgroundd">
  <ion-searchbar (ionInput)="getItems($event)">

  </ion-searchbar>
  <ion-list>
    <ion-item *ngFor="let articulo of listaProductos">{{articulo.nombre}}
      <button ion-button icon-only
              item-end clear color="danger"
              (click)="onItemSelect(articulo)"
      ><ion-icon [name]="articulo.estado ===0 ? addBoton : remBoton" ></ion-icon></button>
    </ion-item>
  </ion-list>
</ion-content>

elegiritems.ts

import {Component, OnInit} from '@angular/core';
import { NavParams } from 'ionic-angular';
import {HomePage} from "../home/home";
import {ListaTerminadaPage} from "../lista-terminada/lista-terminada";
import {Articulo} from "../../Data/articulo.interface";
import Organizador from '../../Data/Organizador';


@Component({
  selector: 'page-elegiritems',
  templateUrl: 'elegiritems.html',
})
export class ElegiritemsPage implements OnInit{
  home=HomePage;
  listaTerminada=ListaTerminadaPage;
  listaProductos :Articulo[]=[];
  productosElegidos: Articulo[] =[];
  listaOrdenada : {pasillo: number, articulos:string[]}[];
  nombreLista:string ='';
  addBoton='ios-add-circle';
  remBoton ='md-close';
  DataLista;


  constructor(public navParams: NavParams) {
  }

  ngOnInit(){
    this.DataLista = this.navParams.data;
    this.listaProductos = this.navParams.get('articulos');
    this.nombreLista = this.navParams.get('listaNombre')
  }

  //Resetea el valor de la Lista ordenada, la cual es reducida en la pag siguiente, al volver atras le da el valor inicial

  ionViewCanEnter(){
    this.listaOrdenada = Organizador;
    this.productosElegidos = this.navParams.get('listaActiva');
    this.onActivos();
    console.log(this.productosElegidos);
  }

  //Inicia una funcion dependiendo de si pertenece o no a la lista de productos elegidos
  onItemSelect(articulo:Articulo){
    if (articulo.estado === 0) {
      this.onAddProduct(articulo);
      articulo.estado = 1;
      return
    }
    if (articulo.estado === 1)
    {
      this.onDeleteProduct(articulo);
      articulo.estado=0;
      return
    }

  }

  //resetea los valores de estado de la lista de productos y a los valores activos los deja en estado 1
  onActivos(){
    for (var i =0; this.listaProductos.length; i++){
      this.listaProductos[i].estado=0;
    }
    for (var x = 0; this.productosElegidos.length; x++){
      this.productosElegidos[x].estado = 1;
    }
  }

  //Agrega el articulo a la lista de productos elegidos
  onAddProduct(articulo: Articulo) {
    console.log(articulo);
    this.productosElegidos.push(articulo);
    console.log(this.productosElegidos);
  }

    //Elimina el articulo de la lista de productos elegidos
    onDeleteProduct(articulo: Articulo){
      const position = this.productosElegidos.findIndex((articuloEl:Articulo) =>{
        return articuloEl.nombre == articulo.nombre
      });
      this.productosElegidos.splice(position,1)
    }



  //Revisa si el articulo seleccionado forma parte del arreglo de los productos elegidos, tambien cambia el icono
  //NO IMPLEMENTADO

  onChecked(articulo){
    for (var i =0; i < this.listaProductos.length; i++) {
        if (this. listaProductos[i].nombre === articulo.nombre){
          return true
        }
    }
    return false
  }

  //Agrega los articulos a una lista ordenada que obtiene desde la basa de datos, esta esta organizada por pasillos

  onOrganizaLista(){
    for (var i =0; i < this.listaOrdenada.length; i++) {
      for (var x =0 ; x < this.productosElegidos.length; x++){
        if (this.listaOrdenada[i].pasillo == this.productosElegidos[x].pasillo){
          this.listaOrdenada[i].articulos.push(this.productosElegidos[x].nombre)
        }
      }
      x=0;
    }
    //Alimenta el arreglo para tener el nombre y la lista ordenada
    this.DataLista.listaOrden = this.listaOrdenada;
  }

  //Funcionalidad de la barra de busqueda, codigo de ionicDocs adecuado

  getItems(ev:any){
    this.listaProductos = this.navParams.get('articulos');

    let val = ev.target.value;

    if (val && val.trim() != ''){
      this.listaProductos = this.listaProductos.filter((item: any) => {
        return (item.nombre.toLowerCase().indexOf(val.toLowerCase()) > -1);
      })
    }
  }
}

1 个答案:

答案 0 :(得分:3)

这是因为您没有传递有效的导航参数,而目标组件的ionViewCanEnter需要listaActiva才能让视图进入。

this.navCtrl.push(this.elegirItem);

中传递有效的导航参数

或者

如果您在视图无法进入之前不想要任何“警卫”,请将ionViewCanEnter更改为ionViewDidLoad