02:實(shí)用至上主義學(xué)VUE3 – 登錄與注銷界面

    承接上節(jié),你最近在學(xué)習(xí) VUE3 ,但是你已經(jīng)能熟練使用 JavaScript 來(lái)完成開(kāi)發(fā)需求了,為了對(duì)比兩者的差異,你準(zhǔn)備用一些小項(xiàng)目練練手。

    承接上節(jié),你最近在學(xué)習(xí) VUE3 ,但是你已經(jīng)能熟練使用 JavaScript 來(lái)完成開(kāi)發(fā)需求了,為了對(duì)比兩者的差異,你準(zhǔn)備用一些小項(xiàng)目練練手。

    需求:提供兩個(gè)界面,登錄界面,用戶界面

    登錄界面要求如下:

    • 提供標(biāo)題
    • 提供賬戶輸入
    • 提供密碼輸入
    • 提供登錄按鈕

    用戶界面要求如下:

    • 提供標(biāo)題
    • 展示輸入的賬號(hào)
    • 展示輸入的密碼
    • 提供注銷按鈕

    運(yùn)行邏輯如下:

    1. 用戶通過(guò)登錄界面輸入賬號(hào)與密碼
    2. 點(diǎn)擊登錄按鈕進(jìn)入后臺(tái)頁(yè)面
    3. 后臺(tái)展示用戶輸入信息,并展示注銷按鈕
    4. 點(diǎn)擊注釋按鈕退回登錄頁(yè)面,并清除輸入的賬號(hào)與密碼

    效果如下

    02:實(shí)用至上主義學(xué)VUE3 - 登錄與注銷界面

    原生 js 實(shí)現(xiàn)

     <div id="app"></div>
        <script>
            // 登錄界面
            function showLogin() {
                const appDiv = document.getElementById('app');
                appDiv.innerHTML = '';
                const loginDiv = document.createElement('div');
                loginDiv.innerHTML = `
        <h1>歡迎您:請(qǐng)登錄</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);
            }
    
            // 登錄函數(shù)
            function login() {
                const account = document.getElementById('account').value;
                const password = document.getElementById('password').value;
                // 這里可以處理登錄邏輯,如校驗(yàn)賬戶密碼等
                // 驗(yàn)證通過(guò)后跳轉(zhuǎn)到用戶界面
                showUser(account, password);
            }
    
            // 注銷函數(shù)
            function logout() {
                // 處理注銷邏輯
                // 注銷后返回登錄界面
                showLogin();
            }
    
            // 初始化,顯示登錄界面
            showLogin();
        </script>

    在注釋的幫助下,可以很快的看懂其中的意思。基本上就是使用 innerHTML 方法來(lái)進(jìn)行數(shù)據(jù)展示。

    vue3 實(shí)現(xiàn)

    代碼

    所有代碼如下

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

    準(zhǔn)備變量

    我們準(zhǔn)備以下幾個(gè)變量,便于使用

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

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

    其中, state 是個(gè)布爾值,用于登錄狀態(tài)判斷,未登錄為 false ,登錄為: true

    按鈕觸發(fā)函數(shù)

    為了簡(jiǎn)潔,我們只準(zhǔn)備了一個(gè)按鈕,觸發(fā)一個(gè)函數(shù),但是我們可以根據(jù)登錄狀態(tài) state

    實(shí)現(xiàn)在不同的狀態(tài)下,觸發(fā)同一個(gè)函數(shù),執(zhí)行不同的操作。

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

    登錄函數(shù)

    我們準(zhǔn)備登錄函數(shù),執(zhí)行登錄中的各種任務(wù)。

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

    首先,我們要判斷,用戶是否輸入了值,通過(guò)拿到對(duì)應(yīng)變量的長(zhǎng)度,我們就能判斷。

    若長(zhǎng)度大于0,則說(shuō)明有值。

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

    當(dāng)判斷為真,用戶按要求填寫(xiě)了賬號(hào)和密碼時(shí)

    • 通過(guò) alert 警告框展示相應(yīng)信息
    • 修改登錄狀態(tài),此時(shí)登錄成功了

    當(dāng)判斷為假,賬號(hào)或密碼其中之一沒(méi)有輸入時(shí),

    • 通過(guò) alert 警告框進(jìn)行提示

    退出函數(shù)

    當(dāng)用戶觸發(fā)退出函數(shù)時(shí),我們執(zhí)行以下操作

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

    分別是:

    • 修改狀態(tài)
    • 設(shè)置賬號(hào)和密碼為空

    標(biāo)題

    標(biāo)題中,我們使用了三元運(yùn)算符。

        <!--顯示標(biāo)題-->
        <h1>歡迎您{{state?":"+userName:",請(qǐng)登錄"}}</h1>

    當(dāng) state 的值為 true 時(shí),代表為真,已登錄,即展示?后的 ":"+userName內(nèi)容,

    這里采用了拼接的方法,將符號(hào)與賬號(hào)值 userName 進(jìn)行了拼接。


    當(dāng) state 的值為 false 時(shí),代表為假,未登錄,即展示:后的 ",請(qǐng)登錄"內(nèi)容,

    因?yàn)樵?HTML 中使用的是經(jīng)過(guò) return 的值,所以無(wú)需 .value 啦。

    內(nèi)容判斷

    這里使用了 v-ifv-else 進(jìn)行判斷。

    使用 v-model 來(lái)進(jìn)行值的雙向綁定,也就是填寫(xiě)的值會(huì)不斷的傳給對(duì)應(yīng)的變量。

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

    當(dāng) state 的值為 true 時(shí),代表為真,已登錄,

    經(jīng)過(guò) ! 取反,值為假,則展示填入的信息

          <p>賬號(hào):{{userName}}</p>
          <p>密碼:{{password}}</p>

    當(dāng) state 的值為 false 時(shí),代表為假,未登錄,

    經(jīng)過(guò) ! 取反,值為真,則展示表單信息

          賬號(hào):<input v-model="userName" type="text" />
          <br>
          密碼:<input v-model="password" type="password" />

    按鈕判斷

    這里,我們使用了簡(jiǎn)寫(xiě),使用 @ 來(lái)代替 v-on。而且,我們還簡(jiǎn)寫(xiě)了 touch()touch

    同樣的,我們?cè)诎粹o上,也使用了 state 狀態(tài)

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

    當(dāng) state 的值為 true 時(shí),代表為真,已登錄,

    此時(shí)展示 ? 后的內(nèi)容,即為“注銷”。

    此時(shí)點(diǎn)擊觸發(fā) touch 函數(shù),因?yàn)?code>state 的值為 true ,會(huì)執(zhí)行 loginOut() ,退出函數(shù)。


    當(dāng) state 的值為 false 時(shí),代表為假,未登錄,

    此時(shí)展示 : 后的內(nèi)容,即為“登錄”。

    此時(shí)點(diǎn)擊觸發(fā) touch 函數(shù),因?yàn)?code>state 的值為 false ,會(huì)執(zhí)行 login() ,登錄函數(shù)。

    總結(jié)

    通過(guò)這個(gè)項(xiàng)目,在代碼行數(shù)上,還是原生的 JavaScript 占優(yōu)。

    但是 Npcink 卻在實(shí)現(xiàn)其功能的過(guò)程中,嗅到了不一樣的味道。

    • 原生 js 更多的使用函數(shù)來(lái)進(jìn)行數(shù)據(jù)渲染
    • VUE3 更多的使用各種方法來(lái)實(shí)現(xiàn)目標(biāo)

    希望通過(guò)本節(jié)和上節(jié)的兩個(gè)實(shí)際按鈕,能幫助到大家體驗(yàn)到其中 JavaScript 和 VUE3 兩者間的細(xì)微差異。

    最新文章

    • 后續(xù)文章不定期撰寫(xiě)中,點(diǎn)個(gè)關(guān)注,獲取平臺(tái)最新文章推送。
    • 技術(shù)有限,還望諸位協(xié)助勘誤,于評(píng)論區(qū)指出,
    • 常一文多發(fā),最新勘定和增補(bǔ)文章于下方鏈接給出
    • http://m.kartiktrivedi.com/277371.html

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來(lái)源于互聯(lián)網(wǎng),僅供網(wǎng)友學(xué)習(xí)交流,若您喜歡本文可附上原文鏈接隨意轉(zhuǎn)載。
    無(wú)意侵害您的權(quán)益,請(qǐng)發(fā)送郵件至 1355471563#qq.com 或點(diǎn)擊右側(cè) 私信:Muze 反饋,我們將盡快處理。
    ?
    購(gòu)物車
    優(yōu)惠劵
    搜索
    主站蜘蛛池模板: 亚洲AV无码一区二区三区国产| 成人精品一区二区户外勾搭野战| 亚洲福利一区二区| 亚洲AV本道一区二区三区四区| 亚洲熟妇av一区二区三区下载| 高清无码一区二区在线观看吞精| 亚洲日本一区二区三区| 97久久精品午夜一区二区| 无码丰满熟妇一区二区| 人妻体内射精一区二区三区| 视频一区二区三区免费观看| 中文字幕精品一区二区| 精品乱码一区二区三区四区| 国产精品美女一区二区视频| 久久精品国产一区| 久久精品国产一区| 美女毛片一区二区三区四区| 久久久久人妻精品一区| 精品无码日韩一区二区三区不卡| 国产av成人一区二区三区| 人妻少妇一区二区三区| 激情内射日本一区二区三区| 中文字幕在线播放一区| 中文字幕久久亚洲一区| 久久高清一区二区三区| 亚洲国产美国国产综合一区二区 | 一区二区三区四区在线观看视频 | 成人精品一区二区户外勾搭野战| 精品人伦一区二区三区潘金莲| 青青青国产精品一区二区| 国产成人一区二区三中文| 亚洲中文字幕一区精品自拍| 日本一区二三区好的精华液| 国产一区二区精品在线观看| 日本一区二区高清不卡| 成人区人妻精品一区二区不卡网站 | 国产一区二区三区精品久久呦| 国产福利一区二区| 亚洲综合无码精品一区二区三区 | 亚洲国产av一区二区三区 | 一区二区三区在线免费 |