我试图从服务器接收一个将包装在JSON中的pdf.
如果我只是将pdf的字节数组发送到前端,我可以通过设置responseType来正确读取它arraybuffer,然后我可以通过以下方式下载pdf:
var blob = new Blob([data], { type: application/pdf});
if ($window.navigator && $window.navigator.msSaveOrOpenBlob) {
$window.navigator.msSaveOrOpenBlob(blob);
} else {
var a = document.createElement("a");
document.body.appendChild(a);
var fileURL = URL.createObjectURL(blob);
a.href = fileURL;
a.download = fileName;
a.click();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当服务器尝试发送带有bytearray的JSON时,如果我设置为responseTypeto JSON,那么我将无法转换blob.但是,如果我设置responseType为arrayBuffer,我将获得一个arrayBuffer数组,如何将其转换为JSON,同时仍然能够提取pdf:
我收到的JSON格式如下:
{
result: true,
value: <the pdf byte array>,
errorMessage: null
}
Run Code Online (Sandbox Code Playgroud) 开始学习 Angular,但不确定如何使用 ngrx 构建结构。
简而言之,我有一个服务,其中有两个数组,以及以特定方式操作这些数组的方法。我创建了该服务,因为多个组件需要操作数组的逻辑。其中一些将使用这些数组之一的相同状态,一些将具有不同的状态。
不同的组件将访问此服务,对数组进行更改并使数组返回渲染。然而,在网上进行研究后,似乎常见的做法是保持服务无状态。然后我遇到了 ngrx 商店。
所以我想我可以将这些数组放在主存储中而不是放在服务中,所以它变成:
组件会使用service,操作数组,service会触发一个action,然后store会通知组件数组的变化
但是,请查看 ngrx https://ngrx.io/ generated/images/guide/store/state-management-lifecycle.png 中的图表。组件和服务之间会有一个箭头,当应用程序变得更大时,这似乎会造成混乱。
那么我应该如何处理这个问题呢?我在这里误解了什么吗?也许服务应该是一个组件(但是阅读https://angular.io/guide/styleguide#delegate-complex-component-logic-to-services,看起来我确实在做正确的事情,将逻辑移出组件到服务,使组件变得简单)。
任何意见是极大的赞赏