App下載

用VUE實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)生信息管理系統(tǒng)

猿友 2021-01-13 14:45:17 瀏覽數(shù) (4917)
反饋

一、主要功能

本次任務(wù)主要是使用 VUE 來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)生信息管理系統(tǒng),主要功能為:

1.顯示所有學(xué)生的信息(默認(rèn)為10個(gè)) \2. 點(diǎn)擊按鈕,顯示出學(xué)號(hào)尾號(hào)為單數(shù)(或雙數(shù))的學(xué)生信息 \3. 增加學(xué)生信息 \4. 要求使用VUE中 父子組件間通信

二、實(shí)現(xiàn)思路

1.數(shù)據(jù)管理:使用 json 數(shù)組的方式來管理儲(chǔ)存數(shù)據(jù)
2.顯示學(xué)生信息:因?yàn)榻M件是可復(fù)用的 Vue 實(shí)例,所以在這里引入子組件(用來顯示每個(gè)學(xué)生的信息),將主頁作為父組件。主頁(父組件)使用 v-for 循環(huán)顯示子組件。
3.按單雙號(hào)篩選查找學(xué)生:循環(huán)遍歷 json 數(shù)組,進(jìn)行判斷,把符合條件的信息放到新的 json 數(shù)組。
4.使用 v-if 把符合篩選條件的學(xué)生信息顯示在主頁上。

三、代碼實(shí)現(xiàn)

1、父子組件定義

父組件 :首先要定義要調(diào)用的組件

export default {
 name: 'HelloWorld',
 components: {
   ChildCom//調(diào)用組件
},

子組件:

export default {
 name: 'Child',
 props: [
   'card_item'
],
 data () {
   return {
  }
}
}

2、組件中的通信

組件是通過 Prop 向子組件傳遞數(shù)據(jù)的

父組件:使用 v-for 遍歷學(xué)生信息數(shù)組 通過:card_item(子組件定義的接受數(shù)據(jù)的名字) = “stu”(父組件傳給子組件的數(shù)據(jù))

    <div  v-if="flag_danshu==1"><Child-com id="1" class="list" v-for="(stu,index1) in new_list_danshu" :key="index1" :card_item="stu" ></Child-com></div>
   <div v-else-if="flag_shuangshu==1"><Child-com id="2" class="list" v-for="(stu,index2) in new_list_shuangshu" :key="index2" :card_item="stu"  ></Child-com></div>
   <div v-else-if="flag_all==1"><Child-com id="3" class="list" v-for="(stu,index3) in stu_list" :key="index3" :card_item="stu"></Child-com></div>

子組件:

      <div>姓名:{{ card_item.name }} </div>
     <div>學(xué)號(hào):{{card_item.stuId}}</div>
     <div v-if="card_item.gender==1">性別:男</div>
     <div v-else>性別:女</div>

3、顯示出學(xué)號(hào)尾號(hào)為單數(shù)(或雙數(shù))的學(xué)生信息(以單數(shù)為例)

 danshu (stu_list) {
       this.new_list_danshu=[];
      stu_list.forEach((item) => {
        if(item.stuId%2!=0)
        this.new_list_danshu.push(item);//符合條件則加進(jìn)用來存儲(chǔ)單數(shù)信息的json數(shù)組
        }
    )
     // alert(this.new_list[1]);
     this.flag_all=0; //顯示全部
     this.flag_danshu=1;//顯示單數(shù)
     this.flag_shuangshu=0;//顯示雙數(shù)
     
  },

4、增加學(xué)生信息

 add:function(){
   var name = document.getElementById("stu_name").value;
   var id = document.getElementById("stu_id").value;
   var gender = document.getElementById("stu_gender").value;
   if(name==''||id==''||gender==''){
     alert('請(qǐng)完善信息');
    }
     else{
       var item ={};
       item.stuId=id;
       item.name=name;
       item.gender=gender;
       this.stu_list.push(item);
       alert('添加成功');
       
    }
  }

四、效果展示

主頁 

無標(biāo)題3
 顯示學(xué)號(hào)尾號(hào)為單數(shù)的學(xué)生信息 

無標(biāo)題4
 增加學(xué)生信息
無標(biāo)題5

五、總結(jié)

雖然只是很小的一個(gè) demo,但在完成中還是遇到了很多問題,比如要注意 v-show 和 v-if 的區(qū)別。一開始,本來想使用 v-show 來按篩選條件來顯示不同的學(xué)生信息,但是發(fā)現(xiàn)就算不符合當(dāng)前條件的學(xué)生信息還是被渲染并且顯示出來了,通過尋求幫助,才發(fā)現(xiàn)如果我們要顯示多個(gè)頁面,并且這些頁面是互斥的關(guān)系話,我們使用 v-if ,v-else-if,v-else 來顯示。

以下是 v-show 和 v-if 的區(qū)別

v-if 只有在判斷為 true 的時(shí)候才會(huì)對(duì)數(shù)據(jù)進(jìn)行渲染,false 的時(shí)候把包含的代碼進(jìn)行刪除。除非再次進(jìn)行數(shù)據(jù)渲染,v-if 才會(huì)重新判斷。可以說是用法比較傾向于對(duì)數(shù)據(jù)一次操作。 v-show 是無論判斷是什么都會(huì)先對(duì)數(shù)據(jù)進(jìn)行渲染,只是 false 的時(shí)候?qū)?jié)點(diǎn)進(jìn)行display:none;的操作。所以再不重新渲染數(shù)據(jù)的情況下,改變數(shù)據(jù)的值可以使數(shù)據(jù)展示或隱藏。


0 人點(diǎn)贊