2016-07-06 16 views
0

ノード2で角度2で作業しているところがあります。以下は私のコードです。行(可変)をthis.rowsdata(可変)に設定できませんでした。 私は、ノードJが非同期呼び出しを使用しているという理由があると思います。それがthis.rowsデータが行のために未定義になる理由です。ここUncaught TypeError:未定義の 'rowsdata'プロパティを設定できません

/// <reference path="../typings/node/node.d.ts" /> 
import { Component } from 'angular2/core'; 
import { OnInit } from 'angular2/core'; 

declare var module : any; 
declare var jQuery : any; 
var rowsdata : any[] = []; 
// self = this; 
interface ROWS { 
name : string, 
current_balance : number 
} 

@Component({ 
selector : 'portfolioList', 
templateUrl : '../app/view/portfoliolist.html', 
moduleId : module.id 
}) 

export class PortfolioList implements OnInit { 
// self : any = this; 

constructor() { 
// var self : this; 
} 

ngOnInit(): any { 
this.showdata(); 
// console.log(this.rowsdata); 
} 

showdata() { 
console.log("called"); 
var portfolioList = require('../app/api/showPortfolio.js'); 
portfolioList.showPortfolio(function(err:any, rows:any) { 
    console.log(rows); 
    // self.rowsdata = rows; 
    this.rowsdata = rows; 
}); 

// console.log(self.rowsdata); 

console.log(rowsdata); 
} 
} 

showPortfolio機能は、あなたのコードで

exports.showPortfolio = function(callback) { 
db.all(squel .select() 
.from("portfolios") 
.field("name") 
.field("current_balance") .toString() , function(err, rows) {  callback(null, rows) }); 
} 
+0

'console.log(this)' rowsdataを設定する前に。 'undefined'と表示されます。未定義オブジェクトのプロパティを設定することはできません。それはメッセージです – Apostolos

+0

私は 'console.log(this)'をプログラムのどこにも書きませんでした。私は行のデータをオブジェクトの配列である行を設定したい。だから私はrows2ataを使用することができます* ngForのangular2 HTMLテンプレートです。あなたが理解したいと思っています。 –

+0

私はあなたが知っていないことを知っている、私はちょうどエラーを見るためにそれを行うように言った。 basaratは問題を解決する答えを出しました。ファット・アローは、関数内で 'this 'を参照するための解決策です。 – Apostolos

答えて

2

である:脂肪の矢印に

portfolioList.showPortfolio(function(err:any, rows:any) { 

変更この:

portfolioList.showPortfolio((err:any, rows:any) => { 

もっと

https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html

+0

Nopeと同じエラーが発生しました。まだ未定義になっています。 –

+0

本当ですか?'showdata(){'を 'showdata =()=> {'に変更してください。これは矢印関数にも書かれています。 – basarat

+0

showdata =()=> { console.log( "called"); portfolioList.showPortfolio((エラー:任意、行:任意)=> { // console.log(rows); // self.rowsdata = rows; this.rowsdata = rows;}); // console.log(self.rowsdata); console.log(this.rowsdata); } –

0

私はこのコードでコメントを投稿できないので、私は答えを投稿します。 このように動作するはずです。私はいくつか余分なログを入れました。

showdata() { 
console.log("called"); 
var _this = this; 
console.log(_this); 
var portfolioList = require('../app/api/showPortfolio.js'); 
portfolioList.showPortfolio(function(err:any, rows:any) { 
    console.log(rows); 
    console.log(_this); 
    _this.rowsdata = rows; 
}); 

// console.log(self.rowsdata); 

console.log(rowsdata); 
} 
} 
+0

私は "昔ながらの"方法で答えを投稿していますが、私はbasaratのソリューションがうまく動作していることを確信しています。 – Apostolos

+0

最後に 'console.log(rowsdata)'にある行データをまだ取得していません。私はショックを受けました。なぜなら最初にconsole.log(_this)を最初に印刷したときに実際に期待される値が得られましたが、最後にrowsdataに行を設定できなかったからです。 –

+0

しかし、それは解決のための一歩です。あなたはあなたのタイトルが言っている 'Undefined'エラーの' Can not set property '行データを取得しません! – Apostolos

関連する問題