<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        使用node+vue.js實現SPA應用

        來源:懂視網 責編:小采 時間:2020-11-27 20:27:13
        文檔

        使用node+vue.js實現SPA應用

        使用node+vue.js實現SPA應用:業務需求最近公司要求開發web版的app,由于app是偏向內容方面,而且帶了一個聊天模塊,所以一般的多頁開發不是很適合,而且主要是手機瀏覽,對加載速度或者用戶體驗來說都比較苛刻。調研了很多框架和模式,最后自己東拼西湊搞出來了這么一個玩意。服務端毫無疑
        推薦度:
        導讀使用node+vue.js實現SPA應用:業務需求最近公司要求開發web版的app,由于app是偏向內容方面,而且帶了一個聊天模塊,所以一般的多頁開發不是很適合,而且主要是手機瀏覽,對加載速度或者用戶體驗來說都比較苛刻。調研了很多框架和模式,最后自己東拼西湊搞出來了這么一個玩意。服務端毫無疑

        業務需求

        最近公司要求開發web版的app,由于app是偏向內容方面,而且帶了一個聊天模塊,所以一般的多頁開發不是很適合,而且主要是手機瀏覽,對加載速度或者用戶體驗來說都比較苛刻。調研了很多框架和模式,最后自己東拼西湊搞出來了這么一個玩意。

        服務端

        毫無疑問使用node,使用typescript可以有效的在編碼同時查錯,強類型語言寫服務端毫無壓力。

        #app.ts 只貼重要代碼
         
        var webpack = require('webpack')
        var webpackDevMiddleware = require('webpack-dev-middleware')
        var WebpackConfig = require('./webpack.config')
         
        import * as index from "./routes/index";
        import * as foo from "./routes/foo";
        import * as bar from "./routes/bar";
         
        var app = express();
         
        //啟動服務的時候 打包并監聽客戶端用到的文件,webpackDevMiddleware是開發模式,他會打包js在內存里面,你改了文件,它也會重新打包
        app.use(webpackDevMiddleware(webpack(WebpackConfig), {
         publicPath: '/__build__/',
         stats: {
         colors: true
         }
        }));
         
        //一般的配置項
        app.set('views', __dirname + '/views');
        app.set('view engine', 'ejs');
        app.set('view options', { layout: false });
        app.use(bodyParser.urlencoded({ extended: true }));
        app.use(bodyParser.json());
        app.use(methodOverride());
        app.use(express.static(__dirname + '/public'));
         
        var env = process.env.NODE_ENV || 'development';
        if (env === 'development') {
         app.use(errorHandler());
        }
         
        //路由配置
        app.get('/', index.index);
        app.get('/foo', foo.index);
        app.get('/bar', bar.index);
         
         
        app.listen(3000, function(){
         console.log("Demo Express server listening on port %d in %s mode", 3000, app.settings.env);
        });
         
        export var App = app;

        服務端渲染頁面

        #index.ts
        import express = require("express")
        import vueServer = require("vue-server") //服務端渲染vue的插件
         
        var Vue = new vueServer.renderer(); //創建一個服務端的vue
         
        export function index(req: express.Request, res: express.Response) {
         
         //創建一個組件
         var vm = new Vue({
         template: `
         <p>This is index!</p>
         `
         });
         
         //等待html渲染完成,再返回給瀏覽器 vueServer.htmlReady是vue-server的自帶事件
         vm.$on('vueServer.htmlReady', function(html:string) {
         //這里用的是ejs模板 可以把需要用到的數據設置成window下的全局變量,方便客戶端的js訪問。
         res.render('layout',{server_html:html,server_data:'window.cm_data = {name:"張三"}'})
         });
         
        };
        #layout.ejs 訪問這個SPA的所有url返回的都是這個頁面 <meta>標簽都可以動態設置,只要傳參數進來就可以
        <!DOCTYPE html>
        <html>
        <head>
         <meta charset="utf-8">
         <title>Vue Router Example</title>
         <style>
         .v-link-active {
         color: red;
         }
         </style>
         <script>
         //定義一些前端需要用到的全局屬性,文章ID或用戶信息什么的
         //index.ts中傳過來的是 window.cm_data = {name:"張三"}
         //前端就能訪問到了
         <%-server_data%>
         </script>
        </head>
        <body>
         
        //這里的id是前端需要用到的一個標識
        <div id="app">
         <h1>Hello App!</h1>
         <p>
         <a v-link="{ path: '/foo' }">Go to Foo</a>
         <a v-link="{ path: '/bar' }">Go to Bar</a>
         </p>
         //router-view是客戶端vue-router需要解析的dom
         //server_html是根據訪問url地址生成的html,是做SEO的重點,不加載下面的app.js也可以看到內容
         <router-view> <%-server_html%> </router-view>
        </div>
        //webpack打包好的js,主要是路由配置
        <script src="/__build__/app.js"></script>
        </body>
        </html>

        客戶端

        #app.js 這個是/__build__/app.js,可以用es6編寫,webpack會轉換的
         
        import Vue from './vue.min' //客戶端的vue.js
        import VueRouter from './vue-router.min' //vue的路由插件,配合webpack可以很簡單實現懶加載
         
        //懶加載路由 只有訪問這個路由才會加載js
        import Foo from 'bundle?lazy!../../components/foo' //配合webpack的bundle-loader,輕松實現懶加載
        import Bar from 'bundle?lazy!../../components/bar'
        import Index from 'bundle?lazy!../../components/index'
         
        var App = Vue.extend({})
         
        Vue.use(VueRouter)
         
        var router = new VueRouter({
         //這里要好好說一下,一定要設置html5模式,不然前后端URL不統一會發生問題
         //比如訪問 http://localhost:3000/ 服務端定義是訪問index.ts這個路由文件
         //如果不是html5模式的話,經過客戶端js運行之后會變成http://localhost:3000/#!/
         
         //在比如直接瀏覽器輸入 http://localhost:3000/foo 服務端定義是訪問.ts這個路由文件
         //如果不是html5模式的話,經過客戶端js運行之后會變成 http://localhost:3000/foo/#!/
         
         //設置了html5模式后,加載完js后不會加上#!這2個類似錨點的字符,實現前后端路由統一如果用戶刷新瀏覽器的話,服務端也能渲染出相應的頁面。
         history: true, //html5模式 去掉錨點 
         saveScrollPosition: true //記住頁面的滾動位置 html5模式適用
        })
         
        //定義路由,要和服務端路由路徑定義的一樣
        router.map({
         '/' : {
         component: Index //前端路由定義,
         },
         '/foo': {
         component: Foo
         },
         '/bar': {
         component: Bar
         }
        })
         
        //啟動APP
        router.start(App, '#app')

        需要完善的地方

        前后端統一模板,已經找到方法了把html分離出來,node端用fs.readFileSync方法獲取,客戶端用webpack的raw-loader獲取html內容

        更多使用node+vue.js實現SPA應用相關文章請關注PHP中文網!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        使用node+vue.js實現SPA應用

        使用node+vue.js實現SPA應用:業務需求最近公司要求開發web版的app,由于app是偏向內容方面,而且帶了一個聊天模塊,所以一般的多頁開發不是很適合,而且主要是手機瀏覽,對加載速度或者用戶體驗來說都比較苛刻。調研了很多框架和模式,最后自己東拼西湊搞出來了這么一個玩意。服務端毫無疑
        推薦度:
        標簽: VUE 應用 spa
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 韩国18福利视频免费观看| 久久国产精品免费观看| 国产精品美女午夜爽爽爽免费| 亚洲国产老鸭窝一区二区三区| 大地影院MV在线观看视频免费| 亚洲人成色777777在线观看| 中国极品美軳免费观看| 好看的电影网站亚洲一区 | 亚洲精品理论电影在线观看| 好爽…又高潮了免费毛片| 亚洲熟女综合色一区二区三区| 在线a人片天堂免费观看高清| 亚洲成a∧人片在线观看无码| 国产精品免费看久久久久| 久久人午夜亚洲精品无码区 | 我的小后妈韩剧在线看免费高清版| 亚洲的天堂av无码| 午夜神器成在线人成在线人免费| 色一情一乱一伦一视频免费看| 久久久无码精品亚洲日韩软件| 日韩精品无码免费专区网站| 亚洲国产韩国一区二区| 四虎免费在线观看| 和老外3p爽粗大免费视频| 亚洲午夜在线电影| 日韩中文字幕免费| 女人隐私秘视频黄www免费| 亚洲电影在线播放| 亚洲国产av一区二区三区| 暖暖在线视频免费视频| 亚洲AV无码无限在线观看不卡| yy6080久久亚洲精品| 午夜无码A级毛片免费视频 | a级毛片在线免费| 国产精品亚洲精品观看不卡| 大胆亚洲人体视频| 久久青草免费91线频观看不卡 | 又黄又大的激情视频在线观看免费视频社区在线 | 亚洲欧美日韩综合俺去了| 国产精品V亚洲精品V日韩精品| 91热久久免费精品99|