vue 構(gòu)建單頁應(yīng)用3

事件調(diào)用方法時傳遞參數(shù)

  • 代碼
# template
<!-- methods 傳遞參數(shù)的兩種方法 -->
<button v-on:click="showParam1('我是參數(shù)1')">點我顯示參數(shù)1</button>
<button data-param="我是參數(shù)2" @click="showParam2($event)">點我顯示參數(shù)2</button>

# script
...
methods: {
    // 直接傳參
    showParam1(str) {
        alert(str);
    },
    // 傳遞過來一個 事件對象 通過該對象獲取參數(shù)
    showParam2(e) {
        console.log(e.srcElement.dataset.param);
    }
}
  • v-on:事件="調(diào)用方法(參數(shù)列表)" 可以簡寫為 @事件="方法(參數(shù))"
  • 第一種方法是直接傳遞參數(shù)。
  • 第二種方法是傳遞 $event => 即觸發(fā)事件的對象作為參數(shù)弯予,并且在標(biāo)簽上使用 data-參數(shù)名 來配置參數(shù)距帅。
  • 然后在方法參數(shù)列表中接收 $event 卒密,然后通過 接收的event.srcElement.dataset.參數(shù)名 來實現(xiàn)讀取標(biāo)簽上配置的參數(shù)。

第二種方法用于無法直接傳參的情況进统。

創(chuàng)建新的初始化文件

  • 使用 vue create projectName vue-cli 創(chuàng)建新項目時悦污,會讓你選擇一種初始化版本:
    • default => 帶 babel, esLint
    • Manually select features => 自己選包
  • 選擇 Manully => 【空格】選取創(chuàng)建項目時就自動帶上的包代芜,選好后【回車】策州,然后可以選擇 Indedicated config files 輸入一個名字瘸味,就可以再下次使用 vue-cli 創(chuàng)建項目時,選擇通過這樣的方式保存的預(yù)置配置了够挂。

構(gòu)建一個簡單的“代辦事項”

  • 增加旁仿、刪除、遍歷
# template

<!-- 文本框 -->
<input type="text" v-model="todo">
<!-- 添加按鈕 -->
<button @click="add()">增加</button>
<hr>
<!-- 遍歷數(shù)據(jù) -->
<ul class="list">
    <!-- 使用 v-for="(單個對象, 該對象在集合中的下標(biāo))" 在循環(huán)中利用下標(biāo)實現(xiàn)刪除 -->
    <li v-for="(thing, key) of things" :key="thing.id"> {{ thing.id }} - {{ thing.todo }} <button @click="remove(key)">刪除</button> </li>
</ul>

# script
export default {
  name: 'app',
  data() {
    return {
      todo: '', //文本框
      // 這是代辦事項集合
      things: [
        {id: 1, todo: '請輸入代辦事項'},
      ],
    }
  },
  methods: {
    // 添加
    add() {
      // 先獲得id
      var id = this.things.length;
      // 然后獲取文本框能容
      var todo = this.todo;
      // 組裝成和 things 中的每一項一樣的格式(ES6語法, key: value 標(biāo)識符是一樣的時候孽糖,可以只寫其中一個)
      var newThing = {id, todo};
      // 最后使用 push() 將新數(shù)據(jù)放進 this.things 中枯冈。
      this.things.push(newThing);
    },

    // 刪除
    remove(key) {
      // 使用 splice(開始下標(biāo), 往后刪除幾個) 來刪除數(shù)據(jù) 
      this.things.splice(key, 1);
    },
  }
}
  • 增加刪除都使用 JS 提供的數(shù)組操作, push(在數(shù)組末尾添加的新元素值) & splice(從哪里開始刪除的下標(biāo), 刪除個數(shù))
  • 在模板上遍歷顯示對象集合(數(shù)組)時梭姓,可以通過 v-for="(obj, index) of objs" 中的 index 來獲取下標(biāo)。

  • 完成后勾選功能的實現(xiàn)
# 修改 template
<ul class="list">
  <h2>代辦</h2>
  <li v-for="(thing, key) of things" :key="thing.id" v-if="!thing.status">
      <input type="checkbox" v-model="thing.status">
      {{ thing.id }} - {{ thing.todo }} 
      <button @click="remove(key)">刪除</button>
  </li>
  <hr>
  <h2>完成</h2>
  <li v-for="(thing, key) of things" :key="thing.id" v-if="thing.status" class="active">
      <input type="checkbox" v-model="thing.status">
      {{ thing.id }} - {{ thing.todo }} 
      <button @click="remove(key)">刪除</button>
  </li>
</ul>

# 數(shù)據(jù)定義改一下
things: [
  {id: 0, todo: '請輸入代辦事項', status: false},
],  
  • 上面實現(xiàn)了修改 thing.status 的功能:使用 <input type="checkbox" v-model="thing.status"> 綁定當(dāng)前被遍歷事件的狀態(tài)值嫩码,當(dāng)勾選時誉尖,該值為 true。
  • 使用 v-if 來控制頁面上元素的顯示和隱藏铸题。

  • 使用 localStorage 實現(xiàn)存儲本地事件

    1. 新建 /src/module/storage.js
    /**
    * localStorage 封裝
    */
    
    // 設(shè)置一個帶有 set() 和 get() 方法的對象
    var storage = {
        // 設(shè)置
        set(key, value) {
            localStorage.setItem(key, JSON.stringify(value));
        },
    
        // 讀取
        get(key) {
            return JSON.parse(localStorage.getItem(key));
        },
    }
    
    // 并包路這個對象
    export default storage;
    

    JSON.stringify(對象) => 對象轉(zhuǎn)JSON字符串铡恕, JSON.parse(字符串) => 字符串轉(zhuǎn)對象。

    1. 在 /src/App.vue 根組件中引用上面代碼定義和暴露的模塊
    // 引用對象
    import storage from "./module/storage";
    // console.log(storage);
    
    1. 在 添加丢间,刪除探熔,清空三個方法中添加這樣一句代碼 storage.set('things', this.things); => 調(diào)用引用的 storage 對象的set() 方法。
    2. 使用 生命周期函數(shù) mounted(): 當(dāng)組件被掛載完成后自動調(diào)用烘挫,當(dāng)頁面刷新時讀取存儲在 localStorage 中的代辦事項數(shù)據(jù)
    // 初始化函數(shù)
    mounted() {
      var things = storage.get('things');
      if(things) {
        this.things = things;
      }
    }
    
    1. 解決一個無法正確讀取狀態(tài)的問題:因為我們的“開關(guān)” <input type="checkbox" v-model="thing.status"> 在改變時沒有進行 localstorage 的存儲诀艰,所以需要在標(biāo)簽上添加一個被修改時觸發(fā)的事件 @chage="saveStatus()" ,然后在 methods 里定義一個 saveStatus() 函數(shù)饮六,調(diào)用 storage.set('things', this.things); 存儲即可其垄。

上面的知識用了 nodeJS 提供的模塊化思想:定義并且使用 export 暴露某個對象。然后在其他文件使用 import 引用一些被暴露的對象卤橄。實現(xiàn)對象分類封裝绿满。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市窟扑,隨后出現(xiàn)的幾起案子喇颁,更是在濱河造成了極大的恐慌漏健,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件橘霎,死亡現(xiàn)場離奇詭異蔫浆,居然都是意外死亡,警方通過查閱死者的電腦和手機茎毁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門克懊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人七蜘,你說我怎么就攤上這事谭溉。” “怎么了橡卤?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵扮念,是天一觀的道長。 經(jīng)常有香客問我碧库,道長柜与,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任嵌灰,我火速辦了婚禮弄匕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沽瞭。我一直安慰自己迁匠,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布驹溃。 她就那樣靜靜地躺著城丧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪豌鹤。 梳的紋絲不亂的頭發(fā)上亡哄,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音布疙,去河邊找鬼蚊惯。 笑死,一個胖子當(dāng)著我的面吹牛灵临,可吹牛的內(nèi)容都是我干的拣挪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼俱诸,長吁一口氣:“原來是場噩夢啊……” “哼菠劝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赶诊,失蹤者是張志新(化名)和其女友劉穎笼平,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舔痪,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡寓调,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锄码。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夺英。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖滋捶,靈堂內(nèi)的尸體忽然破棺而出痛悯,到底是詐尸還是另有隱情,我是刑警寧澤重窟,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布载萌,位于F島的核電站,受9級特大地震影響巡扇,放射性物質(zhì)發(fā)生泄漏扭仁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一厅翔、第九天 我趴在偏房一處隱蔽的房頂上張望乖坠。 院中可真熱鬧,春花似錦刀闷、人聲如沸熊泵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽戈次。三九已至轩勘,卻和暖如春筒扒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绊寻。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工花墩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澄步。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓冰蘑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親村缸。 傳聞我的和親對象是個殘疾皇子祠肥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容