02:實用至上主義學VUE3 - 登錄與注銷界面

    承接上節,你最近在學習 VUE3 ,但是你已經能熟練使用 JavaScript 來完成開發需求了,為了對比兩者的差異,你準備用一些小項目練練手。

    承接上節,你最近在學習 VUE3 ,但是你已經能熟練使用 JavaScript 來完成開發需求了,為了對比兩者的差異,你準備用一些小項目練練手。

    需求:提供兩個界面,登錄界面,用戶界面

    登錄界面要求如下:

    • 提供標題
    • 提供賬戶輸入
    • 提供密碼輸入
    • 提供登錄按鈕

    用戶界面要求如下:

    • 提供標題
    • 展示輸入的賬號
    • 展示輸入的密碼
    • 提供注銷按鈕

    運行邏輯如下:

    1. 用戶通過登錄界面輸入賬號與密碼
    2. 點擊登錄按鈕進入后臺頁面
    3. 后臺展示用戶輸入信息,并展示注銷按鈕
    4. 點擊注釋按鈕退回登錄頁面,并清除輸入的賬號與密碼

    效果如下

    02:實用至上主義學VUE3 - 登錄與注銷界面

    原生 js 實現

     <div id="app"></div>
        <script>
            // 登錄界面
            function showLogin() {
                const appDiv = document.getElementById('app');
                appDiv.innerHTML = '';
                const loginDiv = document.createElement('div');
                loginDiv.innerHTML = `
        <h1>歡迎您:請登錄</h1>
        <label>
          賬戶:
          <input type="text" id="account" />
        </label>
        <br />
        <label>
          密碼:
          <input type="password" id="password" />
        </label>
        <br />
        <button onclick="login()">登錄</button>
      `;
    
                appDiv.appendChild(loginDiv);
            }
    
            // 用戶界面
            function showUser(account, password) {
                const appDiv = document.getElementById('app');
                appDiv.innerHTML = '';
                const userDiv = document.createElement('div');
                userDiv.innerHTML = `
        <h1>歡迎您:${account}</h1>
        <p>賬戶名:${account}</p>
        <p>密碼:${password}</p>
        <button onclick="logout()">注銷</button>
      `;
    
                appDiv.appendChild(userDiv);
            }
    
            // 登錄函數
            function login() {
                const account = document.getElementById('account').value;
                const password = document.getElementById('password').value;
                // 這里可以處理登錄邏輯,如校驗賬戶密碼等
                // 驗證通過后跳轉到用戶界面
                showUser(account, password);
            }
    
            // 注銷函數
            function logout() {
                // 處理注銷邏輯
                // 注銷后返回登錄界面
                showLogin();
            }
    
            // 初始化,顯示登錄界面
            showLogin();
        </script>

    在注釋的幫助下,可以很快的看懂其中的意思。基本上就是使用 innerHTML 方法來進行數據展示。

    vue3 實現

    代碼

    所有代碼如下

    <!--載入vue.js-->
      <script src="https://unpkg.com/vue@next"></script>
      <div id="Application">
        <!--顯示標題-->
        <h1>歡迎您{{state?":"+userName:",請登錄"}}</h1>
        <!--進行if判斷-->
        <div v-if="!state">
          賬號:<input v-model="userName" type="text" />
          <br>
          密碼:<input v-model="password" type="password" />
        </div>
        <div v-else>
          <p>賬號:{{userName}}</p>
          <p>密碼:{{password}}</p>
        </div>
        <!--展示按鈕-->
        <button @click="touch">{{state?"注銷":"登錄"}}</button>
      </div>
      <script>
        const App = Vue.createApp({
          setup() {
            const userName = Vue.ref("");               //賬號
            const password = Vue.ref("");               //密碼
            const state = Vue.ref(false);               //登錄狀態
    
            //判斷是否登錄,執行對應功能
            const touch = () => {
              if (!state.value) {
                login();           //登錄
              } else {
                loginOut();        //退出
              }
            };
    
            //登錄
            const login = () => {
              if (
                userName.value.length > 0
                &&
                password.value.length > 0
              ) {
                alert(`
                賬號:${userName.value}  
                密碼:${password.value}
                `
                );                                                //彈窗展示信息
                state.value = !state.value;                       //修改狀態
              } else {
                alert('請輸入賬號密碼');                             //提示信息
              }
            };
    
            //退出登錄
            const loginOut = () => {
              state.value = !state.value;      //修改登錄狀態
              userName.value = "";             //重置信息
              password.value = "";             //重置信息
            }
            return {
              title,
              state,
              userName,
              password,
              touch
            }
          },
        })
        App.mount("#Application")
      </script>

    準備變量

    我們準備以下幾個變量,便于使用

            const userName = Vue.ref("");               //賬號
            const password = Vue.ref("");               //密碼
            const state = Vue.ref(false);               //登錄狀態

    這里都使用了 ref 方法,將所有的變量都監控起來,使用 value 可以拿到其中的值,例如 userName.value

    其中, state 是個布爾值,用于登錄狀態判斷,未登錄為 false ,登錄為: true

    按鈕觸發函數

    為了簡潔,我們只準備了一個按鈕,觸發一個函數,但是我們可以根據登錄狀態 state

    實現在不同的狀態下,觸發同一個函數,執行不同的操作。

            //判斷是否登錄,執行對應功能
            const touch = () => {
              if (!state.value) {
                login();           //登錄
              } else {
                loginOut();        //退出
              }
            };
    • 未登錄的時候,state 的值是 false ,我們使用 ! 取反,此時,點擊函數 touch() 會執行 login() 函數。
    • 登錄后,state 的值是 true ,我們使用 ! 取反,此時,點擊函數 touch() 會執行 loginOut() 函數。

    登錄函數

    我們準備登錄函數,執行登錄中的各種任務。

            //登錄
            const login = () => {
              if (
                userName.value.length > 0
                &&
                password.value.length > 0
              ) {
                alert(`
                賬號:${userName.value}  
                密碼:${password.value}
                `
                );                                                //彈窗展示信息
                state.value = !state.value;                       //修改狀態
              } else {
                alert('請輸入賬號密碼');                             //提示信息
              }
            };

    首先,我們要判斷,用戶是否輸入了值,通過拿到對應變量的長度,我們就能判斷。

    若長度大于0,則說明有值。

    這里,我們使用了“與”判斷,只有兩邊的值均為 true 時,此判斷才為 true

    當判斷為真,用戶按要求填寫了賬號和密碼時

    • 通過 alert 警告框展示相應信息
    • 修改登錄狀態,此時登錄成功了

    當判斷為假,賬號或密碼其中之一沒有輸入時,

    • 通過 alert 警告框進行提示

    退出函數

    當用戶觸發退出函數時,我們執行以下操作

            //退出登錄
            const loginOut = () => {
              state.value = !state.value;      //修改登錄狀態
              userName.value = "";             //重置信息
              password.value = "";             //重置信息
            }

    分別是:

    • 修改狀態
    • 設置賬號和密碼為空

    標題

    標題中,我們使用了三元運算符。

        <!--顯示標題-->
        <h1>歡迎您{{state?":"+userName:",請登錄"}}</h1>

    state 的值為 true 時,代表為真,已登錄,即展示?后的 ":"+userName內容,

    這里采用了拼接的方法,將符號與賬號值 userName 進行了拼接。


    state 的值為 false 時,代表為假,未登錄,即展示:后的 ",請登錄"內容,

    因為在 HTML 中使用的是經過 return 的值,所以無需 .value 啦。

    內容判斷

    這里使用了 v-ifv-else 進行判斷。

    使用 v-model 來進行值的雙向綁定,也就是填寫的值會不斷的傳給對應的變量。

          <div v-if="!state">
          賬號:<input v-model="userName" type="text" />
          <br>
          密碼:<input v-model="password" type="password" />
        </div>
        <div v-else>
          <p>賬號:{{userName}}</p>
          <p>密碼:{{password}}</p>
        </div>

    state 的值為 true 時,代表為真,已登錄,

    經過 ! 取反,值為假,則展示填入的信息

          <p>賬號:{{userName}}</p>
          <p>密碼:{{password}}</p>

    state 的值為 false 時,代表為假,未登錄,

    經過 ! 取反,值為真,則展示表單信息

          賬號:<input v-model="userName" type="text" />
          <br>
          密碼:<input v-model="password" type="password" />

    按鈕判斷

    這里,我們使用了簡寫,使用 @ 來代替 v-on。而且,我們還簡寫了 touch()touch

    同樣的,我們在按鈕上,也使用了 state 狀態

        <!--展示按鈕-->
        <button @click="touch">{{state?"注銷":"登錄"}}</button>

    state 的值為 true 時,代表為真,已登錄,

    此時展示 ? 后的內容,即為“注銷”。

    此時點擊觸發 touch 函數,因為state 的值為 true ,會執行 loginOut() ,退出函數。


    state 的值為 false 時,代表為假,未登錄,

    此時展示 : 后的內容,即為“登錄”。

    此時點擊觸發 touch 函數,因為state 的值為 false ,會執行 login() ,登錄函數。

    總結

    通過這個項目,在代碼行數上,還是原生的 JavaScript 占優。

    但是 Npcink 卻在實現其功能的過程中,嗅到了不一樣的味道。

    • 原生 js 更多的使用函數來進行數據渲染
    • VUE3 更多的使用各種方法來實現目標

    希望通過本節和上節的兩個實際按鈕,能幫助到大家體驗到其中 JavaScript 和 VUE3 兩者間的細微差異。

    最新文章

    • 后續文章不定期撰寫中,點個關注,獲取平臺最新文章推送。
    • 技術有限,還望諸位協助勘誤,于評論區指出,
    • 常一文多發,最新勘定和增補文章于下方鏈接給出
    • http://m.kartiktrivedi.com/277371.html
    VUE項目

    新手常見的 todo 列表渲染詳細拆解 - Vue3新手基礎教程

    2022-8-20 15:09:02

    functions.php文件詳解 - wordpress開發

    2020-5-30 21:40:52

    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    0 條回復 A文章作者 M管理員
      暫無討論,說說你的看法吧
    ?
    個人中心
    購物車
    優惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 亚洲一区无码中文字幕乱码| 精品一区二区三区免费视频| 99精品久久精品一区二区| 色窝窝无码一区二区三区成人网站 | 亚洲美女高清一区二区三区| 国产成人精品日本亚洲专一区| 美女福利视频一区二区| 一本一道波多野结衣AV一区| 国产成人精品视频一区二区不卡| 精品久久国产一区二区三区香蕉 | 国产一区二区三区免费观在线| 亚洲精品日韩一区二区小说| 91亚洲一区二区在线观看不卡| 久久久91精品国产一区二区三区| 亚洲一区二区精品视频| 一区精品麻豆入口| 美女视频一区二区三区| 日韩少妇无码一区二区三区| 国产一区视频在线免费观看| 动漫精品一区二区三区3d| 手机福利视频一区二区| 国产精品一区二区毛卡片| 亚洲AV日韩综合一区尤物| 亚洲av无码一区二区三区在线播放 | 超清无码一区二区三区| 国产亚洲3p无码一区二区| 国产一区二区高清在线播放| 果冻传媒一区二区天美传媒| 亚洲乱码日产一区三区| 一区二区三区日韩| 国产日韩一区二区三区在线播放| 精品三级AV无码一区| 亚洲欧美一区二区三区日产| 亚洲AV无码一区二区三区久久精品| 亚洲AV无码一区二区三区网址| 国内精品一区二区三区最新| 天码av无码一区二区三区四区 | 无码日韩AV一区二区三区| aⅴ一区二区三区无卡无码| chinese国产一区二区| 亲子乱AV视频一区二区|