亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

web開發中Vuex怎么用

發布時間:2021-07-27 14:41:56 來源:億速云 閱讀:134 作者:小新 欄目:web開發

這篇文章給大家分享的是有關web開發中Vuex怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

什么是vuex

說白了就是一個可以全局管理狀態的東西,用官方的話說是它采用集中式存儲管理應用的所有組件的狀態,并以相應的規則保證狀態以一種可預測的方式發生變化,說人話就是可以時刻監聽一個值的狀態改變,同時項目里面別的組件也可以使用這個變量。做出相應的處理。

安裝

這個是萬年不變的,沒什么好說的。直接在項目里面運行下面這行代碼

npm install vuex --save

我的業務場景

首先說一下業務場景,不然看代碼是沒有意義的,畢竟代碼是為了解決業務的問題,我的業務是需要做一個機器的管理項目,那么這個機器有很多臺,例如機器1、機器2等,那么想管理就需要將所有的機器先拿到,然后根據需要切換想設置的機器,view顯示對應的機器的配置信息,需求是很明確的,我語言表達能力不行,直接看圖。

web開發中Vuex怎么用

這里簡單的解釋一下,有人說,這個不是很簡單嘛,直接將切換的函數寫到select的控件里面,直接點擊切換的函數的時候直接給后端對應的uuid,拿到值就可以了,是的,如果只有這一個頁面是可以的,但是仔細看布局,select組件是在一個公共組件里面的,你選擇的時候你的uuid是不可以直接給到當前頁面的,即時給到他,別的配置怎么辦呢?而且我們要做的是切換的時候直接整個項目里面的uuid全部改掉,然后重新渲染整個數據,才是合理的解決方案。說一下我開始的想法,我開始是準備使用緩存做,每次用戶切換的時候我都將最新的uuid放到緩存里面,但是有一個問題解決不了就是在別的頁面怎么實時監聽這個值改變了呢?所以,使用vuex是一個比較合理的解決方案,看代碼

使用

新建一個store.js

引入

  • 在store.js里面直接將下面的代碼復制到里面

  • 聲明一個您需要監聽的變量(store.js)

/**
 * created by ClearLove
 * @aim 標題欄中需要更改自助機的uuid,所有的返回值都需要是該自助機下的數據,所以需要聲明一個全局的可以監聽uuid的變化
 * @params machine_uuid_flag 全局uuid
 */
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)


const state = {
 machine_uuid_flag: '', //機器uuid
}

const getters = {
 getters_mac_uuid() {
  return state.machine_uuid_flag
 }
};
const mutations = {
 mutations_mac_uuid(state, mac_uuid) {
  state.machine_uuid_flag = mac_uuid
 }
};
const actions = {
 actions_mac_uuid(state, mac_uuid) {
  state.commit('mutations_mac_uuid', mac_uuid)
 }
};

export default new Vuex.Store({
 state,
 getters,
 mutations,
 actions
})

頁面使用

首先我們子啊公共組件也就是展示select組件的地方將切換事件處理一下

/**
    * @change_machine 更改自助機
    */
   change_machine(machine_mac_uuid) {
    this.machine_id = machine_mac_uuid;
    // 這里是將最新的更換的機器的uuid,將store里面的uuid更換掉,這樣才可以保證別的地方使用這個uuid的地方也會同時改變
    this.$store.dispatch('actions_mac_uuid',machine_mac_uuid);
    sessionStorage.setItem('machine_mac_uuid', this.machine_id)
   },

把引入組件的代碼也貼上來吧,這樣好理解

<el-select v-model="machine_name" placeholder="自助機列表" size="mini" @change="change_machine">
       <el-option
        v-for="item in machine_list"
        :key="item.mac_uuid"
        :label="item.machine_name"
        :value="item.mac_uuid">
       </el-option>
</el-select>

這個時候下面的頁面怎么接收這個值做出相應的改變呢?

  created: function () {
   this.machine_mac_uuid = sessionStorage.getItem('machine_mac_uuid');
   this.machine_name = sessionStorage.getItem('machine_name');
   //將最新的uuid拿到
   this.update_mac_uuid = this.$store.state.machine_uuid_flag;
   this.get_settings_info()
  },
  /**
   * 接收store的改變的值
   */
  computed:{
   machine_uuid_flag(){
    //將接收到的最新的uuid return出去 
    return this.$store.state.machine_uuid_flag
   }
  },
  /**
   * 監聽該store里面值的變化
   */
  watch: {
   //監聽這個值是不是接收到,改變的話直接重新執行獲取機器的方法
   machine_uuid_flag: function (newvalue , oldvalue) {
    this.update_mac_uuid = newvalue; //將最新的值傳遞給更新的對象
    this.get_settings_info();
   }
  },
  methods: {
   /**
    * @get_settings_info 獲取某一臺自助機的詳情
    */
   get_settings_info() {
    this.$axios({
     method: 'post',
     url: this.api.api_zzj_9006 + 'manager_back/get_main_info/',
     data: {
      machine_uuid: this.update_mac_uuid ? this.update_mac_uuid : this.machine_mac_uuid
     }
    }).then((res) => {
     let machine = res.data.data;
     this.machine_name = machine.machine_name;
     this.machine_mac_uuid = machine.machine_mac_uuid;
     this.location = machine.location;
     this.mac_uuid = machine.mac_uuid;
     this.machine_uuid = machine.machine_uuid;
     this.mac_uuid_two = machine.mac_uuid_two;
     this.expire_data = machine.expire_data;
     this.environmental_state_dec = machine.environmental_state_dec;
     this.machine_type_des = machine.machine_type_des;
     this.system_version = machine.system_version;
    }).catch((err) => {
     console.error(err)
    })
   }
  },

我在想你們是不是心里一萬句cnm飄過,寫那么多做什么?裝逼嗎?其實不是的,是我在看別人的博客的時候發現一個問題,就是很多人貼代碼的時候因為貼的是一部分,導致很多人摸不著頭腦,也不知道每一個方法是怎么傳遞的,我不想我的博客別人看了以后也有這樣的疑問,所以才整個直接貼出來,當然我會做出詳細的解釋,。

解釋一下上面的代碼:首先我們在頁面加載的時候也就是created的階段將最新的uuid也就是store里面的全局變量的值拿到,有人說你拿到, 為什么還要寫下面的,那么問題就來了,如果用戶在當前頁面直接切換了機器的uuid,那么他沒有刷新頁面,也沒有切換頁面,這個時候created是不會執行的,是不是,那么最新的uuid怎么更新呢?你即使監聽了但是由于createrd不執行,導致的問題就是你監聽的值一直沒有變化,所以我們需要將頁面里面的uuid變化時刻監聽,所以我們需要在computed里面接收最新的uuid,然后我們監聽這個里面的值,只要改變,就做出相應的改變,這樣就滿足了我們的需求,

問題1:為什么使用computed不直接使用watch?

有人看到以后就會覺得我們直接監聽這個值不行嗎?我們這里要明白的是watch是只可以監聽data里面聲明的變量或者對象,除此之外是監聽不到的,而computed用來監控自己定義的變量,該變量不在data里面聲明,直接在computed里面定義,然后就可以在頁面上進行雙向數據綁定展示出結果或者用作其他處理。

問題2:為什么使用緩存?

這里使用緩存的目的是為了你第一次進來的時候,如果用戶什么都不切換,不執行change_machine函數的話,那么我們請求接口的參數是空的,所以我們需要默認一個值,你可以直接在store里面默認,也可以我在第一次進來的時候直接判斷是不是存在store的值,沒有的話就用我默認的緩存里面的值。

問題3: 為什么created里面已經拿到了,還要寫監聽函數?

這個問題可能有人會問,但是其實很簡單,因為用戶不刷新頁面的時候created是不執行的,那么我們就拿不到最新的uuid進行數據的更新,所以要寫監聽的函數。

問題4: 為什么使用this.$store.dispatch?

我們這里使用是根據官方文檔來的,你可以直接使用commit或者什么也不用,直接this.$store.state.machine_uuid_flag也是可以的,但是我們改變了uuid,那么就要重置一下store里面的原始值,所以這里需要接收我們改變的值,也就是用戶選擇了別的機器的時候用的值。如果我們不需要重置原始值的話,可以直接定義一個全局變量,然后直接

this.$store.state.machine_uuid_flag(這里格式亂了)就可以了,但是這樣的業務場景應該不多。畢竟我們定義了就是為了改變它從而我們可以監聽這個變化的值。

感謝各位的閱讀!關于“web開發中Vuex怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

深泽县| 墨玉县| 陕西省| 肃南| 松潘县| 怀仁县| 丹江口市| 岑巩县| 黄龙县| 成都市| 阿克| 蒙自县| 九寨沟县| 江孜县| 长泰县| 淳安县| 毕节市| 公安县| 顺义区| 竹溪县| 安新县| 吉木萨尔县| 湘西| 井冈山市| 广平县| 光泽县| 娄底市| 扎囊县| 石林| 穆棱市| 景德镇市| 大竹县| 临夏市| 道真| 灵台县| 民丰县| 仁布县| 祁东县| 来安县| 娱乐| 防城港市|