国产精品爱久久久久久久小说,女人扒开腿让男人桶到爽 ,亚洲欧美国产双大乳头,国产成人精品综合久久久久,国产精品制服丝袜无码,免费无码精品黄av电影,黑色丝袜无码中中文字幕,乱熟女高潮一区二区在线

            Vue的設計理念

            2021-9-29    前端達人

            目錄

            Mvvm模型

            Vue中的Mvvm實現原理

            自己實現雙向數據綁定的示例

            Vue與模板引Thymeleaf擎對比

            顯示變量值(Vue)

             顯示變量值(Thymeleaf)

            替換Html(Vue)

            替換Html(Thymeleaf)

            綁定屬性(Vue)

            綁定屬性(Thymeleaf)

            隱藏顯示區塊(Vue)

            隱藏顯示區塊(Thymeleaf)

            遍歷列表數據-帶索引(Vue)

             遍歷列表數據-帶索引(Thymeleaf)

            引入其他文件內容(vue)

            引入其他文件內容(Thymeleaf)

            Vue的頁面定義基石-Options API

            Vue中的代理運用

            nginx反向代理

            vue代理(正向代理)

            Vue特性能力-filter


            Vue (讀音 /vju?/,類似于 view) 是一套用于構建用戶界面的漸進式框架。與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。Vue 的核心庫只關注視圖層,不僅易于上手,還便于與第三方庫或既有項目整合

            Mvvm模型

            MVVM 是Model-View-ViewModel 的縮寫,它是一種基于前端開發的架構模式,其核心是提供對View 和 ViewModel 的雙向數據綁定,這使得ViewModel 的狀態改變可以自動傳遞給 View,即所謂的數據雙向綁定。
            Vue.js 是一個提供了 MVVM 風格的雙向數據綁定的 Javascript 庫,專注于View 層。它的核心是 MVVM 中的 VM,也就是 ViewModel。 ViewModel負責連接 View 和 Model,保證視圖和數據的一致性,這種輕量級的架構讓前端開發更加高效、便捷。

            Vue中的Mvvm實現原理

            Vue.js的實現方式,對數據(Model)進行劫持,當數據變動時,數據會出發劫持時綁定的方法,對視圖進行更新。

            這里有兩個方向: 

            1、數據流向視圖:數據變動時,能自動更新Dom節點的內容。此功能是通過數據劫持實現的,對數據(Model)進行劫持,當數據變動時,會調用劫持時綁定的方法,對視圖進行更新。

            2、視圖流向數據:如輸入框input內容發生變動時,input對應的數據也會發生變動。此功能是通過監聽Dom事件實現的。當用戶在輸入框中輸入文字(即inputkeyup事件發生時),vue會監聽到這個事件,找到對應的數據模型變量,修改變量值。

            vue中雙向數據綁定的示例

            
            
            1. <div id="app-6">
            2. <p>{{ message }}</p>
            3. <input v-model="message">
            4. </div>
            
            
            1. var app6 = new Vue({
            2. el: '#app-6',
            3. data: {
            4. message: 'Hello Vue!'
            5. }
            6. })

            自己實現雙向數據綁定的示例

            
            
            1. <!DOCTYPE html>
            2. <html lang="en">
            3. <head>
            4. <title>雙向綁定demoo</title>
            5. <meta charset="UTF-8">
            6. </head>
            7. <body>
            8. <div id="app">
            9. <input type="text" id="txt">
            10. <p id="show-txt"></p>
            11. </div>
            12. </body>
            13. <script>
            14. var model={}
            15. Object.defineProperty(model,'txt',{
            16. _txt: "",
            17. get:function(){
            18. return _txt
            19. },
            20. set:function(newValue){
            21. _txt = newValue
            22. document.getElementById('txt').value = newValue
            23. document.getElementById('show-txt').innerHTML = newValue
            24. }
            25. })
            26. document.addEventListener('keyup',function(e){
            27. model.txt = e.target.value
            28. })
            29. </script>
            30. </html>

            這里要講到一個關鍵函數

            Object.defineProperty 

            Object.defineProperty 需要三個參數(object , propName , descriptor)

            1 object 對象 => 給誰加
            2 propName 屬性名 => 要加的屬性的名字 【類型:String】
            3 descriptor 屬性描述 => 加的這個屬性有什么樣的特性【類型:Object】

            descriptor 屬性描述

            get一個給屬性提供getter的方法,如果沒有getter則為undefined。該方法返回值被用作屬性值。默認為undefined
            set一個給屬性提供setter的方法,如果沒有setter則為undefined。該方法將接受唯一參數,并將該參數的新值分配給該屬性。默認值為undefined

            Vue與模板引Thymeleaf擎對比

            顯示變量值(Vue)

            
            
            1. <div id="app">
            2. {{ message }}
            3. </div>

             顯示變量值(Thymeleaf)

            
            
            1. <div id="app" th:text="${message}">
            2. </div>

            替換Html(Vue)

            
            
            1. <div id="app" v-html="content">
            2. </div>

            替換Html(Thymeleaf)

            
            
            1. <div id="app" th:html="${content}">
            2. </div>

            綁定屬性(Vue)

            <img :src="imgUrl" :id="newId"/>

            綁定屬性(Thymeleaf)

            <img th:attr="id=${newId},src=${imgUrl}"/>

            隱藏顯示區塊(Vue)

            
            
            1. <div id="app" v-if="show">
            2. 這是一個區塊
            3. </div>

            隱藏顯示區塊(Thymeleaf)

            
            
            1. <div id="app" th:if="${show}">
            2. 這是一個區塊
            3. </div>

            遍歷列表數據-帶索引(Vue)

            
            
            1. <ul id="app">
            2. <li v-for="(item, index) in dataList">
            3. {{ index }} - {{ item.message }}
            4. </li>
            5. </ul>

             遍歷列表數據-帶索引(Thymeleaf)

            
            
            1. <ul id="app">
            2. <li th:each="item, stat: ${dataList}">
            3. {{ stat.index }} - {{ item.message }}
            4. </li>
            5. </ul>

            引入其他文件內容(vue)

            在vue中,可復用的單元塊被稱為組件,定義組件

            
            
            1. <template>
            2. <button v-on:click="count++">You clicked me {{ count }} times.</button>
            3. </template>
            4. <script>
            5. export default {
            6. name: "button-counter"
            7. data(){
            8. count: 0
            9. }
            10. }
            11. </script>

             引入組件

            
            
            1. <div id="components-demo">
            2. <button-counter></button-counter>
            3. </div>

            引入其他文件內容(Thymeleaf)

            被導入模塊index.html:

            
            
            1. <div th:fragment="head">
            2. 這是網頁頭
            3. </div>

            在其它頁面導入index.html中的head模塊:

            <div th:include="index::head"></div>

            由此可見在Html層面上來講,vue和后臺的模板引擎,整個設計方向是一樣。都是使用特定屬性標簽,來描述如何把數據映射到視圖上。

            Vue的頁面定義基石-Options API

            Options API,即大家常說的選項API,即以vue為后綴的文件,通過定義methodscomputedwatchdata等屬性與方法,共同處理頁面邏輯

            可以看到Options代碼編寫方式,如果是組件狀態,則寫在data屬性上,如果是方法,則寫在methods屬性上...

            這種形式的頁面定義類似一個配置文件,定義了頁面的數據模型和行為

            Vue中的代理運用

            代理服務器:所謂代理服務器就是位于發起請求的客戶端與原始服務器端之間的一臺跳板服務器,是以正向代理可以隱藏客戶端,反向代理可以隱藏原始服務器。

            代理分為正向代理和反向代理,下面就以我們實際使用中的示例講解下這兩種代理方式的區別。

            nginx反向代理

            這樣對于瀏覽器而言,瀏覽器只需要訪問代理服務器,就可以達到同時訪問兩個網站的目的

             

            我們看下實際場景下的nginx的配置 

            
            
            1. server {
            2. listen 4503;
            3. server_name vue.izkml.com;
            4. access_log "pipe:rollback logs/gov-manage-new-vue/access_log interval=1d baknum=7 maxsize=2G" main;
            5. # 接口代理
            6. location /api {
            7. #去除 /api前綴
            8. rewrite ^.+api/?(.*)$ /$1 break;
            9. # 轉發到 117.71.53.199:50020端口上
            10. proxy_pass http://117.71.53.199:50020;
            11. proxy_buffering off;
            12. }
            13. # 頁面文件代理
            14. location / {
            15. # 直接去本地文件讀取文件路徑
            16. root html/gov-task-supervison;
            17. index index.html index.htm;
            18. if (!-e $request_filename) {
            19. rewrite ^/(.*) /index.html last;
            20. break;
            21. }
            22. }
            23. }

            其中可以看到,主要分為接口代理和頁面代理兩部分
            1. 如果是/api前綴的請求,則去除/api前綴,轉發到后臺網關端口上
            2. 其他情況下,請求的為頁面內容,在html/gov-task-supervison文件夾中讀取文件內容

            vue代理(正向代理)

             

            
            
            1. devServer: { // 支持webPack-dev-server的所有選項
            2. port: 8888, // 端口號
            3. host: '0.0.0.0',
            4. https: false,
            5. open: true, //配置自動啟動瀏覽器
            6. proxy: {
            7. '/api': {
            8. // 轉發地址
            9. target: 'http://117.71.53.199:50020', //測試環境
            10. changeOrigin: true,
            11. ws: true,
            12. // 去除/api前綴
            13. pathRewrite: {
            14. '^/api': ''
            15. }
            16. }
            17. }
            18. }

            這里主要看的是proxy字段,其中定義了規則

            1. 如果是/api前綴的請求,則去除/api前綴,轉發到后臺網關端口上
            2. 其他情況下,請求的為頁面內容,直接讀取本地項目路徑下面的頁面內容 **(隱式包含)**

            Vue特性能力-filter

            Vue.js 允許你自定義過濾器,可被用于一些常見的文本格式化

            應用場景: 前端常量翻譯

            
            
            1. <el-tag v-if="scope.row.status" class="round" size="small" >
            2. {{scope.row.status | CodeMaster('TASK_STATUS')}}
            3. </el-tag>
            
            
            1. Vue.filter('CodeMaster', function (value, type) {
            2. return Vue.prototype.$codeMaster.getCodeValue(type, value);
            3. })

            在上面的代碼中,我們在模板html中,添加了filter的調用,并傳入了一個參數。
            在vue進行html生成的過程中,會調用相應的filter,根據自定義的規則,完成文本格式化操作。




            藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

            分享此文一切功德,皆悉回向給文章原作者及眾讀者.

            轉自:csdn
            免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

            藍藍設計www.dzxscac.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

            日歷

            鏈接

            個人資料

            藍藍設計的小編 http://www.dzxscac.cn

            存檔

            主站蜘蛛池模板: 国内精品自线一区二区三区| 中国女人内射6xxxxx| 久久狠| a级片日本| 麻豆传媒网址| 诱夫1v1高h| 99久久99久久精品国产片果冻| 黄色小说在线免费观看| 青青草视频成人| 日韩精品久久久久久免费| 99这里有精品热视频| 嫩草视频在线观看免费| 草草网站影院白丝内射| 蜜桃视频在线观看免费网址入口| 精品久久久久久中文字幕| 久久久久久无码午夜精品直播| 国产末成年女av片| 99热亚洲| 亚洲欧美日韩成人综合一区| 激情无码人妻又粗又大中国人| 亚洲91视频| 日本精品一二三区| 躁躁躁日日躁| 亚洲伊人情人综合网站| 最新av中文字幕| 久久久久久国产免费a片| 欧洲精品久久久av无码电影| 色爱av| 蜜臀久久99精品久久久画质超高清 | 亚洲成人av在线| 亚洲精品综合在线影院| 国产精品1234| 狠狠干香蕉| 四虎国产精品一区二区| 国产欧美日韩在线中文一区| 91国产视频在线| 男女一边摸一边做爽爽| 色偷偷尼玛图亚洲综合| 丁香在线视频| 天天躁日日躁狠狠躁欧美| 中文字幕日韩精品亚洲七区|