Javascript 在函数中传递变量的类型脚本
刚开始打字,正试着让我的头脑清醒过来 下面是生成三个随机数的代码,我使用这些随机数从json中选择随机对象Javascript 在函数中传递变量的类型脚本,javascript,angular,typescript,angular2-services,Javascript,Angular,Typescript,Angular2 Services,刚开始打字,正试着让我的头脑清醒过来 下面是生成三个随机数的代码,我使用这些随机数从json中选择随机对象 @Injectable() export class TrackService { public drawn :number[]=[]; constructor(private http: Http) { } public getRandomTrack(): Observable<Track[]> { t
@Injectable()
export class TrackService {
public drawn :number[]=[];
constructor(private http: Http) {
}
public getRandomTrack(): Observable<Track[]> {
this.generateRandomNumbers();
console.log(this.drawn); //this.drawn is available here
return this.http
.get(API_ENDPOINT)
.map(this.extractRandomData);
}
public extractRandomData(res: Response) {
let body = res.json();
console.log(this.drawn); //undefined here
var randomTrack = [];
for(var i=0;i<this.drawn.length; i++){
randomTrack.push(body.results[this.drawn[i]]);
}
return randomTrack;
}
private generateRandomNumbers(){
var available = [];
for (var i = 1; i<= 55; i++) {
available.push(i);
}
for (var i = 0; i <3; i++) {
var random = Math.floor((Math.random() * available.length));
this.drawn.push(available[random]);
available.splice(random, 1);
}
return this.drawn;
}
@Injectable()
出口级轨道服务{
公开提款:编号[]=[];
构造函数(专用http:http){
}
public getRandomTrack():可观察{
这个.generateRandomNumbers();
console.log(this.draw);//此处提供this.draw
返回此文件。http
.get(API_端点)
.map(此.map数据);
}
公共数据(res:响应){
让body=res.json();
console.log(this.draw);//此处未定义
var randomTrack=[];
对于(var i=0;i您必须绑定上下文:
public getRandomTrack(): Observable<Track[]> {
this.generateRandomNumbers();
console.log(this.drawn); //this.drawn is available here
return this.http
.get(API_ENDPOINT)
.map((v) => { this.extractRandomData(v) });
}
public getRandomTrack():可观察{
这个.generateRandomNumbers();
console.log(this.draw);//此处提供this.draw
返回此文件。http
.get(API_端点)
.map((v)=>{this.extractRandomData(v)});
}
看
了解更多详细信息。我在末尾添加了这个,使它工作起来
public getRandomTrack():可观察{
这个.generateRandomNumbers();
console.log(this.drawing);
返回此文件。http
.get(API_端点)
.map(这个.data,这个);
}
关于这是好是坏的想法?绘制的数组在您的服务中是全局的,因此您可以在需要内部服务时随时访问它,但您的问题在于地图调用,您应该按如下方式调用:
return this.http.get(API_ENDPOINT)
.map(responseData => this.extractRandomData(responseData));
你可以使用上面的任何一个答案。两者都是正确的。
有关更多信息,请参阅此链接
示例代码
public getRandomTrack(){
this.generateRandomNumbers();
console.log(this.drawn);
[1,2].map(this.extractData,this); //Pass this as argument
[1,2].map(data => { // Arrow function
console.log(this.drawn);
}
extractData(val : any){
console.log(val);
console.log(this.drawn);
}
嗨,Maximus谢谢!请原谅我的无知,这里的v是什么?它只是一个变量,它将保存一个值
public getRandomTrack(){
this.generateRandomNumbers();
console.log(this.drawn);
[1,2].map(this.extractData,this); //Pass this as argument
[1,2].map(data => { // Arrow function
console.log(this.drawn);
}
extractData(val : any){
console.log(val);
console.log(this.drawn);
}