我在使用节点js的角度2处理时遇到困难。下面是我的代码。它无法将行(变量)设置为this.rowsdata
(变量)。
我认为背后的原因是节点Js使用异步调用。可能就是为什么this.rows数据未定义行的原因。
/// <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 :(得分:2)
在您的代码中:
portfolioList.showPortfolio((err:any, rows:any) => {
将其改为胖箭头:
{{1}}
https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html
答案 1 :(得分: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);
}
}