Javascript 角度和角度观测值
我是一个新的观察者,我有一个超级艰难的时间试图了解它是如何工作的 我有一些获取JSON文件数据的代码,但我没有在我的ngOninit上获取它,我假设这是因为代码是异步的。我想设置一个observable来订阅数据,但我对observable一无所知 这是代码Javascript 角度和角度观测值,javascript,angular,rxjs,observable,Javascript,Angular,Rxjs,Observable,我是一个新的观察者,我有一个超级艰难的时间试图了解它是如何工作的 我有一些获取JSON文件数据的代码,但我没有在我的ngOninit上获取它,我假设这是因为代码是异步的。我想设置一个observable来订阅数据,但我对observable一无所知 这是代码 fetch('./assets/data/vendor.json').then(res => res.json()) .then(data => { this.vendorData = data.ve
fetch('./assets/data/vendor.json').then(res => res.json())
.then(data => {
this.vendorData = data.vendors;
this.vendorService.setVendors(this.vendorData);
});
}
ngOnInit() {
this.filteredVendor = this.vendorService.getVendors();
this.isfiltered = true;
console.log(this.filteredVendor)
}
关于我如何做到这一点,你有什么好的指导或教训可以告诉我,让我学习观察到的东西吗
谢谢你的帮助。试试:
ngOnInit() {
this.vendorService.getVendors().subscribe(
venders => this.filteredVendor = venders;
this.isFiltered = true;
console.log(this.filteredVendor);
);
}
至于学习它,我只会不断地练习它,看看如何做事。这些教程可能已经过时了,但它们对我有好处()但是语法可能有点过时,但是要学习新语法,并不是那么难
将可观测数据视为可以使用运算符修改的数据流。为了正确地学习它,你必须把手弄脏,并继续努力解决与之相关的问题。当您陷入困境时,请继续在Stackoverflow上发布,或查看其他人的解决方案。尝试:
ngOnInit() {
this.vendorService.getVendors().subscribe(
venders => this.filteredVendor = venders;
this.isFiltered = true;
console.log(this.filteredVendor);
);
}
至于学习它,我只会不断地练习它,看看如何做事。这些教程可能已经过时了,但它们对我有好处()但是语法可能有点过时,但是要学习新语法,并不是那么难
将可观测数据视为可以使用运算符修改的数据流。为了正确地学习它,你必须把手弄脏,并继续努力解决与之相关的问题。当你陷入困境时,继续在Stackoverflow上发帖,或者查看其他人的解决方案。在你的
获取方法之后,你似乎使用了。然后
建议你有承诺,而不是可观察的。我建议您在服务中使用Rxjs中的from
方法将您的承诺转换为可观察的。或者,你可以从中创建一个主题
假设this.vendorService.getVendors()
返回一个可观察的,您将不得不订阅它,就像他在回答中建议的@AliF50一样:
//Inside your get method in your service:
public getVendors(): Vendor[] {
return from(fetch('./assets/data/vendor.json')).pipe(map(
result => result.json()
));
}
现在,您将通过调用getVendors()
获得一个可观察到的结果
建议:
由于您是角度观测方面的新手,我将建议一种解决方案,这可能是您应用程序的一个很好的改进:
如果你使用可观测值和角度,你也可以研究路由器的解析功能。阅读更多
为您的供应商创建一个VendorResolver
:
@Injectable({ providedIn: 'root' })
export class VendorResolver implements Resolve<Vendor> {
constructor(private vendorService: VendorService) {}
resolve(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<Vendor[]> {
return this.vendorService.getVendors();
}
}
现在,您可以在路线中执行以下操作:
@NgModule({
imports: [
RouterModule.forRoot([
{
path: 'vendors',
component: VendorComponent,
resolve: {
vendors: VendorResolver
}
}
])
],
exports: [RouterModule]
})
export class AppRoutingModule {}
当路由到“供应商”路由时,路由器将使用vendorsolver
自动解析您的供应商。请注意,如果不解决问题,路由将无法完成
在VendorComponent
中,您可以直接从路由快照数据访问供应商:
class VendorsComponent {
constructor(private route: ActivatedRoute) {
}
public ngOnInit() {
this.filteredVendor = this.route.snapshot.data.vendors;
}
}
这使得组件中的代码非常少;除了ActivatedRoute
之外,无需注入任何内容来解析您的供应商
注意:上面的代码是在这里编写的,简化了一点(例如,组件类远未完成),我跳过了导入语句。我尽量做到准确和完整,但如果您有问题或遇到问题,请留下评论,然后我可以在必要时添加一些详细信息。在您的获取方法之后,您似乎使用了。然后
建议您有承诺,而不是可观察的。我建议您在服务中使用Rxjs中的from
方法将您的承诺转换为可观察的。或者,你可以从中创建一个主题
假设this.vendorService.getVendors()
返回一个可观察的,您将不得不订阅它,就像他在回答中建议的@AliF50一样:
//Inside your get method in your service:
public getVendors(): Vendor[] {
return from(fetch('./assets/data/vendor.json')).pipe(map(
result => result.json()
));
}
现在,您将通过调用getVendors()
获得一个可观察到的结果
建议:
由于您是角度观测方面的新手,我将建议一种解决方案,这可能是您应用程序的一个很好的改进:
如果你使用可观测值和角度,你也可以研究路由器的解析功能。阅读更多
为您的供应商创建一个VendorResolver
:
@Injectable({ providedIn: 'root' })
export class VendorResolver implements Resolve<Vendor> {
constructor(private vendorService: VendorService) {}
resolve(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<Vendor[]> {
return this.vendorService.getVendors();
}
}
现在,您可以在路线中执行以下操作:
@NgModule({
imports: [
RouterModule.forRoot([
{
path: 'vendors',
component: VendorComponent,
resolve: {
vendors: VendorResolver
}
}
])
],
exports: [RouterModule]
})
export class AppRoutingModule {}
当路由到“供应商”路由时,路由器将使用vendorsolver
自动解析您的供应商。请注意,如果不解决问题,路由将无法完成
在VendorComponent
中,您可以直接从路由快照数据访问供应商:
class VendorsComponent {
constructor(private route: ActivatedRoute) {
}
public ngOnInit() {
this.filteredVendor = this.route.snapshot.data.vendors;
}
}
这使得组件中的代码非常少;除了ActivatedRoute
之外,无需注入任何内容来解析您的供应商
注意:上面的代码是在这里编写的,简化了一点(例如,组件类远未完成),我跳过了导入语句。我尽量做到准确和完整,但如果您有问题或遇到问题,请留下评论,然后我可以在必要时添加一些详细信息。感谢您的见解,我将继续尝试。感谢您的见解,我将继续尝试。