Edgar Santiago
PreguntaSaludos, no me está funcionando. Me sale el siguiente error:
LugarPage.ngfactory.js:40 ERROR TypeError: Cannot read property ‘nombre’ of undefined
at Object.eval [as updateDirectives] (LugarPage.ngfactory.js:193)
at Object.debugUpdateDirectives [as updateDirectives] (vendor.js:15382)
at checkAndUpdateView (vendor.js:14529)
at callViewAction (vendor.js:14880)
at execComponentViewsAction (vendor.js:14812)
at checkAndUpdateView (vendor.js:14535)
at callViewAction (vendor.js:14880)
at execEmbeddedViewsAction (vendor.js:14838)
at checkAndUpdateView (vendor.js:14530)
at callViewAction (vendor.js:14880)
Este es mi código:
<!-- Generated template for the LugarPage page. See http://ionicframework.com/docs/components/#navigation for more info on Ionic pages and navigation. --> <ion-header> <ion-navbar> <ion-title>Lugar</ion-title> </ion-navbar> </ion-header> <ion-content padding> <ion-list> <ion-item> <ion-label floating>Nombre</ion-label> <ion-input type="text" [(ngModel)]="lugar.nombre"></ion-input> </ion-item> <ion-item> <ion-label floating>Dirección</ion-label> <ion-input type="text" [(ngModel)]="lugar.direccion"></ion-input> </ion-item> <ion-list> <ion-item> <ion-label>Categoría</ion-label> <ion-select [(ngModel)]="lugar.categoria"> <ion-option value="AireLibre">Aire Libre</ion-option> <ion-option value="LugarCerrado">Lugar Cerrado</ion-option> </ion-select> </ion-item> </ion-list> <ion-item> <ion-label floating>Descripción</ion-label> <ion-textarea [(ngModel)]="lugar.descripcion"></ion-textarea> </ion-item> </ion-list> <button ion-button full (click)="guardarLugar()">Guardar Lugar</button> </ion-content> <code>
import { Component } from '@angular/core'; import { IonicPage, NavController, NavParams } from 'ionic-angular'; import { TerceraPage } from '../tercera/tercera'; /** * Generated class for the LugarPage page. * * See https://ionicframework.com/docs/components/#navigation for more info on * Ionic pages and navigation. */ @IonicPage() @Component({ selector: 'page-lugar', templateUrl: 'lugar.html', }) export class LugarPage { lugar: any = {}; constructor(public navCtrl: NavController, public navParams: NavParams) { this.lugar = navParams.data.lugar; // get('lugar'); } guardarLugar(){ console.log(this.lugar); } } <code>
<ion-header> <ion-navbar> <ion-title> Ionic Blank </ion-title> </ion-navbar> </ion-header> <ion-content> <ion-list> <ion-item *ngFor="let lugar of lugares" (click)="irAVistaDeDetalleExistente(place)"> <h2>{{lugar.nombre}}</h2> <h3>{{lugar.direccion}}</h3> <p>{{lugar.categoria}}</p> </ion-item> </ion-list> <ion-fab right bottom> <button ion-fab (click)="irAVistaDeDetalle({})"><ion-icon name="add"></ion-icon></button> </ion-fab> </ion-content> <code>
import { Component } from '@angular/core'; import { NavController } from 'ionic-angular'; import { LugarPage } from '../lugar/lugar'; @Component({ selector: 'page-home', templateUrl: 'home.html' }) export class HomePage { lugares: any = [ {mombre: 'Lugar 1', direccion: 'Direccion 1', categoria: 'Categoria 1'}, {mombre: 'Lugar 2', direccion: 'Direccion 2', categoria: 'Categoria 2'}, {mombre: 'Lugar 3', direccion: 'Direccion 3', categoria: 'Categoria 3'}, ]; constructor(public navCtrl: NavController) { } navegarALugar(name){ this.navCtrl.push(LugarPage, {nombre: name}); } irAVistaDeDetalle(){ this.navCtrl.push(LugarPage, {lugar: {}}); } irAVistaDeDetalleExistente(lugar){ this.navCtrl.push(LugarPage, {lugar: lugar}); } } <code>
Ezequiel Portela
Hola Edgar, como estás?
El problema esta en el archivo lugar.ts, particularmente en la línea
constructor(public navCtrl: NavController, public navParams: NavParams) { this.lugar = navParams.data.lugar; // get('lugar'); }
Al crear un nuevo lugar, el parametro navParams.data.lugar llega vacío por lo que al poner nombre en el ngModel llega como undefined porque no existe como objeto, para poder solucionarlo podes hacerlo de esta forma:
constructor(public navCtrl: NavController, public navParams: NavParams) { this.lugar = navParams.data.lugar || {}; }
Saludos
Edgar Santiago
Oh!! Excelente, muchas gracias Ezequiel!
