Angular 2仪表板应用程序在初始化时调用web api

Angular 2仪表板应用程序在初始化时调用web api

问题描述:

我有一个以角度2编写的仪表板应用程序。我正在使用api调用数据。检索数据后,我将它们呈现在图表中。作为下面的演示链接。当我从dashboardcomponent的ngOnInit()方法进行api调用时,我得到了空响应,但如果我使用按钮单击事件做同样的事情,所有数据按预期方式加载。 什么是最好的地方/开始进行api调用,并在第一次加载时在UI中填充所有数据?Angular 2仪表板应用程序在初始化时调用web api

http://preview.themeforest.net/item/avenxo-responsive-angularjs-html-admin/full_screen_preview/11660185?ref=cirvitis&clickthrough_id=1107952073&redirect_back=true

+0

可以共享代码什么ü试过吗? – Chandru

ngOnInit()可以进行api调用。我没有订阅功能的清晰图片。在用户界面中呈现之前,我必须在我的打字稿文件中进行复杂的计算。我应该只在订阅方法中执行此操作。不要使用全局变量进行赋值,并使用点运算符,并期望事情像魅力一样工作。我发现,直到你有听众订阅不会为你保存数据。这意味着如果你有嵌套元素的大型json,你必须在subscribe方法中执行this.data.innerdata [0] .finalvalue [0],而不是将其传递给方法,并执行所有有趣的事情。

将您的信息传递给initData(数据)并进行所有计算并进行渲染。

export class Recent implements OnInit{ 
allFiles; 
public allFiles_error:Boolean = false; 
openModalWindow:boolean=false; 
images = []; 
currentImageIndex:number; 
opened:boolean=false; 
imgSrc:string; 

constructor(private _recentService: RecentService) { } 

ngOnInit() { 
    this._recentService.getJson().subscribe(
     data => initData(data), 
     err => handleError(), 
     () => console.log('Completed!')); 
} 

initData(data){ 
    this.allFiles = data; 
    console.log("allFiles: ", this.allFiles); 
    console.log(this.allFiles.length); 
    for(var i = 0; i < this.allFiles.length; i++) { 
     this.images.push({ 
     thumb: this.allFiles[i].url, 
     img: this.allFiles[i].url, 
     description: "Image " + (i+1) 
     }); 
    } 
    console.log("Images: ", this.images); 
    console.log(this.images.length); 
    console.log(this.images); 
    console.log(typeof this.images); 
} 

handleError() { 
    this.allFiles_error = true; 
} 

}

要建立在角队打算将意味着把任何API调用到注射服务的方式您的应用程序。检出@Injectable。从那里你可以将服务注入任何需要进行API调用的组件或指令。

此外,API调用可能是异步,这可能是您得到空值的原因的一部分。这些必须在Observable或Promises/Callbacks中处理。

+0

我使用了observable和@inject能够加载数据的服务。我的问题是我应该在哪里进行api调用,以便在我使用ngOnInit()方法进行api调用时将所有内容呈现为空。 api响应没有问题。我认为UI线程不喜欢等待api响应。 – tksdotnet1

+0

@ tksdotnet1如果您发布了一些代码,我们可能会帮助您更多。我发现在构造函数或者ngOnInit(从设计角度来看是首选)中调用API调用的效果很好。在异步调用完成之前,数据将为空。你使用的是subscribe()函数吗? – rjustin