TypeError:无法读取属性' libelle'未定义的

时间:2017-03-31 10:39:58

标签: angular typescript nativescript

错误: TypeError:无法读取未定义文件的proprety&libelle:

这个searche.html

import { Component,OnInit } from "@angular/core";
import { Router,NavigationExtras } from "@angular/router";
import observable = require("data/observable");
import { VoitureService } from "../../voiture/voiture.service";


@Component({
selector: "searche",
moduleId:module.id,
templateUrl: './searche.html',
providers: [VoitureService]

})
export class SearcheComponent {
    public constructor(private router:Router,private postsService:VoitureService) { 
}
voitures: voiture[];
clients:voiture;
req:string='1';
DT:Date;
idClient:number=0;
refClient:string="";
libelleClient:string;


ngOnInit(){
    this.postsService. getPosts(this.req)
    .subscribe(results => this.voitures=results );
        }

    public clicked(IDV:string,LDV:string,RDV:string){
    this.postsService. getClient(IDV)
    .subscribe(results => this.clients=results );
    this.libelleClient=this.clients.libelle;
    this.refClient=this.clients.ref;
    let navigationExtras: NavigationExtras = {
        queryParams:{
            libClient: this.libelleClient,
            refclient : this.refClient,

        }
    }
        this.router.navigate(["page1"], navigationExtras);
}
}


interface voiture{
id:number;
libelle:string;
ref:string;
}

这个searche.html

<stackLayout  class="searcheview">
<stackLayout>

    <SearchBar class="input"  hint="MAchine" ></SearchBar>
        <ListView [items]="voitures" >
            <ng-template let-voiture="item">
                <StackLayout   rows="auto, auto"  columns="*, auto" class="list-group-item"  (tap)="clicked(voiture.id,voiture.libelle,voiture.ref)">
                    <Label   text="{{ voiture.id }}" row="0" col="0"></Label> 
                    <Label   text="{{ voiture.libelle }}" row="0" col="0"></Label> 
                    <label text="{{ voiture.ref }} " row="1" col="0"></label>
                </StackLayout>
            </ng-template>
        </ListView>
</stackLayout>
</stackLayout>

当我调用函数clicked()即时获取错误 TypeError:无法读取属性&#39; libelle&#39;未定义的 请帮忙

1 个答案:

答案 0 :(得分:1)

错误是不言自明的 - this.clients 在您引用它时是未定义的。这是因为您订阅了异步调用,您应该在 subsribe 中进行分配操作。您的错误的可能原因是因为代码段格式不正确,这会阻止您轻松读取代码范围。作为建议使用适当的缩进并避免使用短语法进行回调和回退。

e.g。

public clicked(IDV: string, LDV: string, RDV: string) {
    this.postsService.getClient(IDV)
        .subscribe(results => {
            this.clients = results;

            this.libelleClient = this.clients.libelle;
            this.refClient = this.clients.ref;

            let navigationExtras: NavigationExtras = {
                queryParams: {
                    libClient: this.libelleClient,
                    refclient: this.refClient
                }
            }
        });
}