91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Vue中Computed屬性、Methods和Watch之間有什么區別

發布時間:2021-01-21 10:01:18 來源:億速云 閱讀:208 作者:小新 欄目:編程語言

這篇文章主要介紹了Vue中Computed屬性、Methods和Watch之間有什么區別,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

在這個快速技巧中,我們將研究Vue應用程序的這三個重要方面及其用例。我們將使用這三種方法中的每一種構建相同的搜索組件。

方法

方法或多或少是你所期望的--一個函數,它是一個對象的屬性。 你可以使用方法對DOM中發生的事件做出反應,也可以從組件中的其他位置(例如,在計算屬性或觀察程序中)調用它們。 方法用于對常用功能進行分組--例如,用于處理表單提交或構建可重用功能,例如發出Ajax請求。

你可以在methods對象內部的Vue實例中創建方法:

new Vue({
  el: "#app",
  methods: {
    handleSubmit() {}
  }
})

當想在模板中使用它時,您可以執行以下操作:

<div id="app">
  <button @click="handleSubmit">
    Submit
  </button>
</div>

我們使用v-on指令將事件處理程序附加到我們的DOM元素,該元素也可以縮寫為@符號。

handleSubmit方法將在每次單擊按鈕時被調用。例如,當你想要傳遞方法體中需要的參數時,你可以執行以下操作:

<div id="app">
  <button @click="handleSubmit(event)">
    Submit
  </button>
</div>

在這里,我們傳遞了一個事件對象,例如,它可以防止我們在提交表單時阻止瀏覽器的默認操作。

但是,由于我們使用指令附加事件,因此可以利用修飾符更優雅地實現同一件事:@click.stop="handleSubmit"

現在,讓我們看一個使用方法篩選數組中的數據列表的示例。

在演示中,我們要呈現數據列表和搜索框。每當用戶在搜索框中輸入值時,呈現的數據都會更改。模板將如下所示:

<div id="app">
  <h3>Language Search</h3>

  <div class="form-group">
    <input
      type="text"
      v-model="input"
      @keyup="handleSearch"
      placeholder="Enter language"
      class="form-control"
    />
  </div>

  <ul v-for="(item, index) in languages" class="list-group">
    <li class="list-group-item" :key="item">{{ item }}</li>
  </ul>
</div>

正如您所看到的,我們引用一個handleSearch方法,每次用戶在搜索字段中鍵入內容時都會調用該方法。我們需要創建方法和數據:

new Vue({
  el: '#app',
  data() {
    return {
      input: '',
      languages: []
    }
  },
  methods: {
    handleSearch() {
      this.languages = [
        'JavaScript',
        'Ruby',
        'Scala',
        'Python',
        'Java',
        'Kotlin',
        'Elixir'
      ].filter(item => item.toLowerCase().includes(this.input.toLowerCase()))
    }
  },
  created() { this.handleSearch() }
})

handleSearch方法使用輸入字段的值更新列出的項目。需要注意的一件事是,在methods對象中,不需要使用this.handleSearch引用該方法(在react中必須這樣做)。

計算屬性

盡管以上示例中的搜索按預期工作,但更優雅的解決方案是使用計算屬性。 計算屬性對于從現有資源中組合新數據非常方便,并且與方法相比,它們的一大優點是可以緩存其輸出。 這意味著,如果頁面上與計算屬性無關的某些內容發生更改,并且UI會重新呈現,則將返回緩存的結果,并且將不會重新計算計算屬性,從而為我們節省了潛在的昂貴操作。

計算屬性使我們能夠使用可用的數據即時進行計算。 在這種情況下,我們有一系列需要排序的項目。 我們想要在用戶在輸入字段中輸入值時進行排序。

我們的模板看起來與之前的迭代幾乎相同,除了我們向v-for指令傳遞了一個計算屬性(filteredList):

<div id="app">
  <h3>Language Search</h3>
  <div class="form-group">
    <input
      type="text"
      v-model="input"
      placeholder="Enter language"
      class="form-control"
    />
  </div>
  <ul v-for="(item, index) in filteredList" class="list-group">
    <li class="list-group-item" :key="item">{{ item }}</li>
  </ul>
</div>

腳本部分略有不同。我們在data屬性中聲明語言(以前這是一個空數組),而不是將方法轉移到計算屬性中的方法:

new Vue({
  el: "#app",
  data() {
    return {
      input: '',
      languages: [
        "JavaScript",
        "Ruby",
        "Scala",
        "Python",
        "Java",
        "Kotlin",
        "Elixir"
      ]
    }
  },
  computed: {
    filteredList() {
      return this.languages.filter((item) => {
        return item.toLowerCase().includes(this.input.toLowerCase())
      })
    }
  }
})

filteredList 計算的屬性將包含一個包含輸入字段值的項目數組。 在第一次渲染時(當輸入字段為空時),將渲染整個數組。 當用戶在字段中輸入值時,filteredList將返回一個數組,其中包含在字段中輸入的值。

當使用計算屬性時,要計算的數據必須可用,否則將導致應用程序錯誤。

計算屬性創建了一個新的filteredList屬性,這就是為什么我們可以在模板中引用它的原因。每次依賴項發生變化時,filteredList的值就會發生變化。這里容易改變的依賴關系是input的值。

最后,請注意,計算屬性使我們可以創建一個變量,以在由一個或多個數據屬性構建的模板中使用。一個常見的示例是fullName從用戶的名字和姓氏創建一個,如下所示:

computed: {
  fullName() {
    return `${this.firstName} ${this.lastName}`
  }
}

在模板中,您可以執行{{fullName}}。每當第一個或最后一個名稱的值發生變化時,fullName的值就會發生變化。

觀察者

當您希望對發生的更改(例如,對一個道具或數據屬性)執行一個操作時,觀察者非常有用。正如Vue文檔所述,當您希望執行異步或昂貴的操作來響應數據更改時,這是最有用的。

在我們的搜索示例中,我們可以返回到方法示例,并為input data屬性設置一個監視程序。然后,我們可以對input值的任何變化做出反應。

首先,讓我們還原模板以利用languages data屬性:

<div id="app">
  <h3>Language Search</h3>

  <div class="form-group">
    <input
      type="text"
      v-model="input"
      placeholder="Enter language"
      class="form-control"
    />
  </div>

  <ul v-for="(item, index) in languages" class="list-group">
    <li class="list-group-item" :key="item">{{ item }}</li>
  </ul>
</div>

然后我們的Vue實例將如下所示:

new Vue({
  el: "#app",
  data() {
    return {
      input: '',
      languages: []
    }
  },
  watch: {
    input: {
      handler() {
        this.languages = [
          'JavaScript',
          'Ruby',
          'Scala',
          'Python',
          'Java',
          'Kotlin',
          'Elixir'
        ].filter(item => item.toLowerCase().includes(this.input.toLowerCase()))
      },
      immediate: true
    }
  }})

在這里,我已經將觀察者作為對象(而不是函數)。這樣,我可以指定一個immediate屬性,該屬性將導致觀察者在安裝組件后立即觸發。這具有填充列表的效果。然后,運行的函數在該handler屬性中。

結論

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Vue中Computed屬性、Methods和Watch之間有什么區別”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

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

AI

阿拉善左旗| 青浦区| 佛冈县| 平阴县| 肃北| 泽普县| 张北县| 青浦区| 红安县| 新沂市| 昭苏县| 江口县| 四会市| 绥芬河市| 辽宁省| 平昌县| 乌拉特前旗| 综艺| 万州区| 紫云| 偃师市| 班戈县| 睢宁县| 宾川县| 陵水| 东阳市| 德安县| 宾阳县| 元谋县| 玛沁县| 伊宁县| 怀安县| 长白| 旅游| 华阴市| 磴口县| 塔城市| 子洲县| 松滋市| 瓦房店市| 车致|