我对 Angular 和 rxjs 很陌生。我正在尝试创建一个 angular2 应用程序,该应用程序从静态提供的文本文件(在服务器上本地)获取一些数据,我想在固定时间使用 Angular2 的 http 提供程序和 rxjs 的映射来检索并映射到 Datamodel interval(5000)
。反映对提供的 txt 文件的任何更改。
使用 rxjs 4.x,我知道您可以使用Observable.interval(5000)
它来完成这项工作,但它似乎在 rxjs 5 中不存在。我的解决方法目前使用<meta http-equiv="refresh" content="5" >
重新加载整个页面来刷新整个应用程序,从而重新加载数据。
所以我真正想要的是某种方法来使用 observables 来做到这一点,也许是为了检查是否发生了任何变化。或者只是重新加载数据。
任何帮助或其他/更好的方式将不胜感激。
到目前为止我所拥有的:
@Injectable()
export class DataService {
constructor(private http:Http){}
getData(url) {
return this.http.get(url)
.map(res => {
return res.text();
})
.map(res => {
return res.split("\n");
})
.map(res => {
var dataModels: DataModel[] = [];
res.forEach(str => {
var s = str.split(",");
if(s[0] !== "") {
dataModels.push(new DataModel(s[0], parseInt(s[1]), parseInt(s[2])));
}
});
return dataModels;
})
}
}
@Component({
selector: 'my-app',
template: `Some html to display the data`,
providers: [DataService],
export class AppComponent {
data:DataModel[];
constructor(dataService:DataService) {}
ngOnInit() {
this.dataService.getData('url').subscribe(
res => {
this.data= res;
},
err => console.log(err),
() => console.log("Data received")
);
}
}
依赖:package.json
"dependencies": {
"angular2": "^2.0.0-beta.3",
"bootstrap": "^4.0.0-alpha.2",
"es6-promise": "^3.0.2",
"es6-shim": "^0.33.13",
"jquery": "^2.2.0",
"reflect-metadata": "^0.1.2",
"rxjs": "^5.0.0-beta.0",
"systemjs": "^0.19.20",
"zone.js": "^0.5.11"
},
"devDependencies": {
"typescript": "^1.7.5"
}
index.html 进口:
<script src="node_modules/es6-shim/es6-shim.min.js"></script>
<script src="node_modules/systemjs/dist/system-polyfills.js"></script>
<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script src="node_modules/rxjs/bundles/Rx.js"></script>
<script src="node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="node_modules/angular2/bundles/router.dev.js"></script>
<script src="node_modules/angular2/bundles/http.dev.js"></script>