需求是分享出去一個鏈接,打開後是一個頁面,頁面中的數據都是在前端的,只不過是只顯示一部分,根據用户的操作顯示相應的數據,比如説拖動滑動條改變年份,顯示不同年份的數據

之前是把頁面和樣式都放在後端,頁面中寫好處理邏輯,後端只需要往頁面中塞數據就行了,前端分享鏈接出去之後點開就能看,

但是現在服務器只能內網訪問,所以就需要把頁面放到前端,但數據又只能塞進頁面,不能通過接口獲取(也不是不能,只是由於項目特點的原因 數據計算過程很複雜而且很耗時)

所以只能讓後端把塞好數據的頁面代碼傳過來,前端再渲染

起初我想用v-html指令來處理,然後發現頁面中的{{name}}不能解析,看了一下官網,人家特意説明了一下不能編譯模板,所以只能想其他辦法了

vue項目只能用yarn怎麼添加npm_數據

 

 

 網上所以一圈覺得用v-runtime-template比較靠譜

首先還是需要裝一個依賴

npm install v-runtime-template

在vue.config.js文件中加一行代碼,不然會報錯,當時就是忽略了這一點導致浪費了好長時間

module.exports = {
  runtimeCompiler: true
};

然後就可以把請求接到的前端代碼放進模板中了,像這樣

1 <template>
 2     <div>
 3         <v-runtime-template :template="template"></v-runtime-template>
 4     </div>
 5 </template>
 6 
 7 <script>
 8 import VRuntimeTemplate from "v-runtime-template";
 9 import AppMessage from "./AppMessage";
10 
11 export default {
12   data: () => ({
13     name: "Mellow",
14     template: `
15       <app-message>Hello {{ name }}!</app-message>
16     `
17   }),
18   components: {
19     AppMessage,
20     VRuntimeTemplate
21   }
22 };
23 </script>

但是當時還是遇到了點其他問題,console會有報錯,原因應該是頁面還未渲染完成就加載了相應的methods中的方法,導致undefined

解決辦法就是用this.$nextTick( () => { }  ),操作頁面數據的方法在箭頭函數裏面調用應該就沒什麼問題了

在分享按鈕那個頁面中分享方法和上一篇的分享pdf一樣,都是分享一個鏈接,點擊鏈接發送請求,獲取到數據,再在html頁面進行具體操作

var params = { webPageUrl: fontEndUrl + '/previewHtml?htmlNo='+ htmlNo };

v-runtime-template參考鏈接:https://github.com/alexjoverm/v-runtime-template

補充:

後來發現前段項目打包之後分享出去的html頁面顯示不出來,查看報錯信息推測是頁面元素未成功加載,查閲相關資料後得知是v-runtime-template這個組件打包後不能用,

解決辦法:在vue.config.js中runtimeCompiler:true,下加上一個webpack配置

configureWebpack: {
    resolve: {
        alias: {
            vue$: "vue/dist/vue.common"
        }
    }
},