记录今天工作遇到的问题

1.angular前端项目6到8的升级

按照官网文档(https://update.angular.io/#6.0:8.0)升级,需要删除node_modules、package-lock.json、yarn.lock;

升级完成后,其他人git clone/git pull项目,同样需要升级node(nvm方便管理),cli也需要升级,不然ng cli命令无法执行;

yarn 或npm install后,npm ls查看丢失的依赖,项目可成功运行即可,否则需要安装指定的依赖包

2.angular前端项目中es6与node的认知混乱

前端项目本打算读取assets/static文件夹下的静态资源,发现将es5更新了es6,而node_modules下又自带@types/node,以为可以在前端项目中使用node的require 、fs;修改了tsconfig.app.json文件,types: ["node"],然后发现node的引入方式也变化了:

// import fs from 'fs'; //引入时未报错,但使用时要加 fs.default.read也报错
// import { stat, exists, readFile } from 'fs'; Module '"fs"' has no exported member 'fs'.
// Module '"fs"' has no default export.

// import * as fs from 'fs';
// import * as path from 'path';

// var fs = require('fs');
// var pathUtil = require('path');

// declare const require: any; 
// const fs = require('fs')

以上方式均不行,最后放弃使用node读取项目下文件,采用了笨方法相对路径引入资源文件;其实一开始就知道出于安全性考虑,不能使用node读取文件

3.pdf静态资源的预览

使用浏览器自带pdf插件,打开一个新页面可预览,定制化较差

作为html的一部分直接显示pdf,html5标签有embed、iframe等,插件包有PDFObjectpdf.js等,由于需求只用来展示内容,所以选择了用html5标签的方式。

需要注意的地方:

src绑定:ts中声明的变量类型为any,而不能为string,否则会出现unsafe resouces url的错误,避免再出现其它错误,又使用了DomSanitizer过滤了url

const tmp = '/assets/static/wiki/' + encodeURI(this.fullname);
this.filePath = this.sanitizer.bypassSecurityTrustResourceUrl(tmp);

<iframe [src]="filePath" width="100%" height="100%"> </iframe>

中文静态资源文件名出现乱码、不显示的问题,解决方法:

1. 将本地文件中文改为英文,将显示为英文

2. 通过键值对的方式,增加字段属性,将静态文件改名,在地址栏可显示为中文和英文,具体以Routes定义传参为准

3. 文件名不变,可在上一级页面或本级页面,使用encodeURI编解码,在地址栏可显示为中文和英文,具体以Routes定义传参为准

多文件路由切换后,iframe未发生变化,解决方法:

ngOnInit() {
    // 监听URL参数变化
    this.routeInfo.params.subscribe(params => {
      this.fullname = params.filename;
      this.fileDisplay(); // 文件处理逻辑函数
    });
  }

本地文件路径的问题:

一些pdf静态资源放到了assets/static下,iframe src绑定时,也需以assets为根目录开始,如

<iframe src="/assets/static/wiki/开发者阅读.pdf" width="100%" height="100%"> </iframe> 

 

今天遇到的问题就这些,本以为ts不像移动端那样需要注意变量类型,完全不注意类型时也会遇到坑!

posted @ 2019-08-20 18:17  tony_17  阅读(217)  评论(0编辑  收藏  举报