Saludos, no me está funcionando. Me sale el siguiente error: LugarPage.ngfactory.js:40 ERROR TypeError: Cannot read property ‘nombre’ of ...

Edgar Santiago

Edgar Santiago

Pregunta
student
hace 8 años

Saludos, 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>
2 respuestas
    Ezequiel Portela

    Ezequiel Portela

    student
    hace 8 años

    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

    Edgar Santiago

    student
    hace 8 años

    Oh!! Excelente, muchas gracias Ezequiel!

Curso Básico de Ionic 2018

Curso Básico de Ionic 2018

Sumérgete en una experiencia 360 con el curso de Ionic. Este Framework basado en Angular te permitirá desarrollar aplicaciones híbridas combinando el poder de HTML, CSS y JS. Navega, crea y publica tus propias apps.

Curso Básico de Ionic 2018
Curso Básico de Ionic 2018

Curso Básico de Ionic 2018

Sumérgete en una experiencia 360 con el curso de Ionic. Este Framework basado en Angular te permitirá desarrollar aplicaciones híbridas combinando el poder de HTML, CSS y JS. Navega, crea y publica tus propias apps.