【发布时间】:2020-02-22 01:07:12
【问题描述】:
我有一个组件可以完美地渲染传单地图,我可以在上面绘制一些多边形。我添加了htmlToImage 库来截取我绘制的内容,如果我将它作为子组件附加到同一个组件,它会渲染得很好。但我喜欢将该图像源传递给下一个组件(兄弟组件)并在其上做其他事情。我试图实现一个服务,我的第一个组件将 dataURL 作为字符串变量写入,第二个组件获取该变量并使用它来显示来自该存储路径的图像。第一个组件使用 router-link 方法作为兄弟组件路由到下一个组件(从 home/map 到 home/image),但它不会显示图像,并且 console.log(path) 是空字符串,即我最初在我的服务中初始化的内容。我做错了什么?
我正在使用 Angular 9 并在本地主机上运行。到目前为止,这是我尝试过的:
map.component.ts
// Map related methods ....
// ....
getScreenshot() {
htmlToImage.toPng(document.getElementById('map'))
.then((dataUrl) => {
this.projectService.setProject('image', dataUrl);
})
.catch((error) => {
console.error('oops, something went wrong!', error);
});
}
screenshot.component.ts
const path = this.projectService.getProject().image;
constructr(private projectService: ProjectService) {}
screenshot.component.html
<div class="row content">
<img [src]="path" alt="map" >
</div>
project.service.ts
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class ProjectService {
private project = {
title: '',
image: '',
};
getProject() {
return this.project;
}
setProject(option: any, value: any) {
this.project[option] = value;
}
}
app-routing.module.ts
export const appRoutes: Routes = [
{
path: 'home', component: AppComponent,
children: [
{ path: 'map', component: MapComponent },
{ path: 'image', component: ScreenshotComponent },
]
},
];
我已在StackBlitz 上发布了我的代码。
【问题讨论】:
-
您的 ProjectService 是单例吗?您可以发布您的 ProjectService 的完整代码吗?
-
我想是的,我更新了我的服务的代码部分。
-
是的,我可以看到你的
ProjectService有providedIn: 'root'。您是否将此服务包含在提供者的模块数组中?你能把代码上传到 Stackblitz 上吗?这样我就可以检查发生了什么。 -
我试图复制它here 但stackblitz 无法加载地图。
标签: angular typescript service base64url