【发布时间】:2019-04-04 03:09:17
【问题描述】:
我想通过Angular 6制作一个更新页面,首先从webservice加载数据并在htmlform中建立它。我创建了一个resovler 来处理异步数据加载,但是组件中的观察者总是返回 null,即使我可以看到 Web 服务返回 200 并从浏览器以正确格式提供所有数据,这里是代码 sn-p
更新
在运行调试模式时,我发现ngOnInit() 被调用了两次,而resolver 只被调用了一次。
第一次ngOnInit() 确实提供了购物车对象,但下一次购物车对象为空。
我在 Angular 控制台和 FireFox 控制台中都没有看到任何错误
解析器
@Injectable({
providedIn: 'root'
})
export class CartResolver implements Resolve<ServiceCart> {
constructor(private service: CartService) {}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const id = route.params['id'] ? route.params['id'] : null;
if (id) {
const existingCart = this.service.find(id).pipe(map((cart: HttpResponse<ServiceCart>) => cart.body));
return existingCart;
}
return of(new ServiceCart());
}
}
路由器
const routes: Routes = [
{
path: '', component: CartComponent,
children: [
{path: '', redirectTo: 'list', pathMatch: 'full'},
{path: 'list', component: CartListComponent},
{path: 'create', component: CartEditComponent, resolve: {cart: CartResolver}},
{path: 'update/:id', component: CartEditComponent, resolve: {cart: CartResolver}}
]
}];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class CartRoutingModule {}
组件
@Component({
selector: 'app-cart-edit',
templateUrl: './cart-edit.component.html',
styleUrls: ['./cart-edit.component.css']
})
export class CartEditComponent implements OnInit {
cart: ServiceCart;
.....
ngOnInit() {
this.isSaving = false;
this.activatedRoute.data.subscribe(({ cart }) => {
this.cart = cart; // <--- always null
});
}
CartService(处理 RESTful 服务)
@Injectable({
providedIn: 'root'
})
export class CartService {
find(id: number): Observable<EntityResponseType> {
return this.http.get<ServiceCart>(`${this.environment.config.servicesBaseUrl + '/api/carts'}/${id}`,
{ observe: 'response' });
}
}
有什么问题?
【问题讨论】:
-
它不会调用两次,只有组件中的更改检测会根据 Angular 文档触发两次。
-
@Suresh Kumar Ariya 是的,谢谢,我认为你是对的
标签: javascript angular