2017-10-20 5 views
0

内の既存のプロパティから未定義:特定のページでリターンは私がこのように書かれた、明確に定義されたモデルで、持っているJavaScriptのモデル

export class Navigation { 
    line: { 
    _id: string; 
    code: string; 
    name: string; 
    isVia: boolean; 
    _operator: { 
     _id: string; 
     name: string; 
    }; 
    via: { 
     _id: string; 
     name: string; 
    } 
    }; 
    hour: string; 
    destiny: string; 
} 

私は、コンストラクタの前に、変数に始めていると私はそう:

を私がアクセスできる

this.navigation.destiny = 'center'; 
this.navigation.line.isVia = false; 
this.navigation.line.via.name = 'No path to this line'; 

を:私はそうやっているconstructorで以下

public navigation: Navigation = new Navigation(); 

hourおよびdestinyプロパティただし、例の行のプロパティは機能しません。私のコンソールに次のエラーが表示されます:

ERROR Error: Uncaught (in promise): TypeError: Can not set property 'isVia' of undefined TypeError: Can not set property 'isVia' of undefined

私はモデルデータを使用する必要があります。

何ができますか、どのように配置するのですか?

試み

  1. 公共ナビゲーション:ナビゲーション= {};
  2. 公開ナビゲーション:Navigation = new Navigation;
  3. パブリックナビゲーション:ナビゲーション; this.navigation = Navigation()コンストラクターで使用します。

これらの両方とも同じエラーが発生します。

SCENARIO

基本的にはangular 4で動作し、言語としてtypescriptを使用して、私はionic 2で開発しています。私が 'ionic 4'でページを作成すると、.tsファイル内のファイルが生成されます(.html.ts.scss.modeule.ts)。私は簡単にすべての私のhtmlを操作して、実行時に簡単に。より良い開発のために、私はmodelsのアイデアを使用して、受信時と受信時の両方でコンテンツを標準化します。これに基づいて、送受信のすべてに基づいてmodelの定式化が行われます。モデルは別ファイルです。私の.tsの私のモデルでは私のモデルがインスタンス化されているので、私のnavigation変数は私のテンプレートNavigationの直後になりますコンストラクタは値を付け加えました。なぜなら、私はあなたのhtmlでそれを使用することを知らせてくれたからです。この瞬間、私はこの質問で表現しているエラーを試しています。 complexmodelを使用する必要があるエラーを再現するために

は、それはそれが私がルート内の値を有する鉱山で観察された(destinyhour)とすることができ、それは、オブジェクトがオブジェクトているということですa lineこのオブジェクトの中のオブジェクト私は他を持っています、私はlineからこのオブジェクトにアクセスすることはできません。

答えて

1

の小道具を使用することができますlineがオブジェクトであるため、uはNavigationを構築するとき、それはundefinedある

export class Navigation { 
    line:any= { 
     _id: undefined, 
     code: undefined, 
     name: undefined, 
     isVia: undefined, 
     _operator: { 
      _id: undefined, 
      name: undefined, 
     }, 
     via: { 
      _id: undefined, 
      name: undefined, 
     } 
    }; 
    hour: undefined; 
    destiny: undefined; 
} 
+0

このエラーが発生しました TS2693: 'ブール値'は型を参照していますが、ここでは値として使用されています –

+0

必要なものに合わせて回答を変更してください。ライン:任意= { _id:文字列、 コード:文字列、 名:文字列、 isVia:ブール、 _operator:{ _id:文字列、 名:文字列、 }、 介し解決するために、私はこれをしませんでした:{ _id:String、 name:String、 } }; 時:文字列。 destiny:String; –

+0

はい私は間違いを認識しました。 – Faisal

1

ラインプロパティを設定する場合は、まずクラス定義でラインプロパティを割り当てる必要があります。最初はnew Navigation()lineのプロパティの後にundefinedです。だから最初に何かを設定しなければなりません。そして、それの後に、あなたはあなたのモデルが初期化されていません。line

export class Navigation { 
    line: { 
    _id: string; 
    code: string; 
    name: string; 
    isVia: boolean; 
    _operator: { 
     _id: string; 
     name: string; 
    }; 
    via: { 
    _id: string; 
    name: string; 
    } 
    } = {via: {}, _operator: {}}; 
    hour: string; 
    destiny: string; 
} 

または

var nav = new Navigation(); 
nav.line = {isVia = false, via: {...}}; 
1

、あなたがそのようにそれを初期化する必要があり、その後isViaに価値を置く:あなたのモデルは、これに変更し

this.navigation.destiny = 'center'; 
this.navigation.line = {}; 
this.navigation.line.isVia = false; 
this.navigation.line.via = {}; 
this.navigation.line.via.name = 'No path to this line'; 

がそれを願っていますヘルプ

関連する問題