2016-07-05 12 views
2

私はアプリを作っていますが、別の配列に配列をプッシュしようとすると固まってしまいます。 "未定義のプロパティ 'push'を読み取ることができません。オブジェクトを別のオブジェクトに配置する方法角度/ Javascript

これはオブジェクトです:

export var CARDS: any[] = [ 
    { 
     channel: "facebook" 
     date: "2016-01-07" 
     comments: [ 
      { 
       content: "Hey would you look at this card?", 
       user: "John Appleseed", 
       avatar: "url" 
      }, 
      { 
       content: "I like this card!", 
       user: "John Doe", 
       avatar: "url" 
      } 
     ] 
    }, 
    { 
     channel: "facebook" 
     date: "2016-01-07" 
     comments: [ 
      { 
       content: "Hey would you look at this card?", 
       user: "Jane Doe", 
       avatar: "url" 
      } 
     ] 
    }]; 

私はカードにコメントを追加するには私のアプリでオプションがあります。したがって、私は、作成:

newComment = { 
    content: "", 
    user: "", 
    avatar: "" 
    }; 

そして、私はsubmitComment関数を呼び出すボタンで:

submitComment(comment) { 
    console.log(this.newComment); 
    this.comment.push(newComment); 
} 

私のHTMLは次のようになります(参考:私はイオンの入力について説明して、イオン性で働いていますが)

<ion-input type="text" placeholder="Type a comment..." [(ngModel)]="newComment.content"></ion-input> 
<button (click)="submitComment(comment)">Send comment</button> 

私のsubmitComment関数でconsole.logを実行し、正しい情報を表示します。しかし、プッシュは機能しません。私は、 '未定義のプッシュ'プロパティを読み取ることができませんエラーが発生します。私は括弧の間に "this.newComment"を試しましたが、それもうまくいきません。

私はちょうどAngular/JSを知り始めているので、わかりにくいかもしれません。あなたの助けを前にありがとう:-)

編集:私は追加することを忘れました。私は* ngFor = "コメントを表示するために" card.commentsのコメントをする "を行う。したがって、私はちょうどHTMLの "コメント"を使用します。

+0

:したがって、私は

(click)="submitComment(card)" 

そして、私のtypescriptファイル内

には、次の作成する必要がありました。これは以前の値を上書きします。 – Rajesh

答えて

3

submitCommentメソッドに提供する変数commentがnullであるため問題が発生しました。だから、あなたはどんなメソッド(特にpush)も呼び出すことはできません...

そうでないと、CARDSプロパティが正しく定義されていないようです。この方法ではなく、次のように定義します。

CARDS: any [] = [ 
    { 
    channel: "facebook" 
    date: "2016-01-07" 
    comments: [ 
     { 
     content: "Hey would you look at this card?", 
     user: "John Appleseed", 
     avatar: "url" 
     }, 
     { 
     content: "I like this card!", 
     user: "John Doe", 
     avatar: "url" 
     } 
    ] 
    }, 
    { 
    channel: "facebook" 
    date: "2016-01-07" 
    comments: [ 
     { 
     content: "Hey would you look at this card?", 
     user: "Jane Doe", 
     avatar: "url" 
     } 
    ] 
    } 
]; 
+0

このような迅速な対応に感謝ティエリー!あなたは何をお勧めします? newComment配列を既存のcard.commentsにプッシュするにはどうすればよいですか? –

+0

あなたはようこそ!あなたの 'submitComment'メソッドでは、このようなものがあります:' card.comments.push(this.newComponent); '。私は 'card'がどこから来ているのか分かりませんが、コンポーネント自体から、あるいはメソッドのパラメータとして提供することで参照できなければなりません(例えばngForの中にあれば)... –

0

Thierryのおかげで私の問題は解決しました。 :-) 私は自分のコードで少し見渡しました。同じ問題を抱えているすべての人のための解決策があります。

私の問題は、私のクリック機能で与えた価値の範囲内でした。私が最初に

(click)="submitComment(comment)" 

しかし、 'コメント' は未定義でした。私はngFor = "card.commentsのコメントに"コメントを定義すると思ったが、私のクリック機能はngForの外にあった。あなたが重複したキーを持つ

submitComment(card) { 
    console.log(this.newComment); 
    card.comments.push(this.newComment); 
    }