亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
定義 Vue 的“作用范圍”
在 DOM 中查找元素
讀取和寫入表單變量
使用 Ajax
一個完整的(雖然有點瑣碎)示例
jQuery 已逝,Vue 長存!
首頁 web前端 css教程 從jQuery轉到Vue

從jQuery轉到Vue

Apr 21, 2025 am 09:34 AM

Making the Move from jQuery to Vue

長期使用 jQuery,最近轉向 Vue 的開發(fā)者,或許會對兩者遷移過程感興趣。

首先要明確一點,我并非建議大家放棄 jQuery。雖然現(xiàn)在流行這種說法,幾年前我自己也寫過類似的文章(“我如何(不)使用 jQuery”)。如果 jQuery 能滿足你的需求,并且你的最終用戶也能順利使用你的網(wǎng)站,那就繼續(xù)使用它吧。

本指南主要面向那些擁有多年 jQuery 使用經(jīng)驗,并希望了解如何在 Vue 中完成相同任務的開發(fā)者。因此,我將重點關注我認為 jQuery 的“核心”用例。我不會涵蓋所有可能的特性,而是采用“我經(jīng)常用 jQuery 做 [X]”的方法,這可能更容易讓考慮學習 Vue 的人產(chǎn)生共鳴。(順便說一句,還要注意,我編寫示例的方式只是一種完成任務的方法。jQuery 和 Vue 都提供了多種方法來實現(xiàn)相同的目標,這是一件好事?。?/p>

因此,讓我們考慮一些我們可能會求助于 jQuery 的高級任務:

  • 在 DOM 中查找元素(以便稍后對其進行操作)
  • 更改 DOM 中的內容(例如,段落的文本或按鈕的類)
  • 讀取和設置表單值
  • 表單驗證(實際上只是上述各項的組合)
  • Ajax 調用和處理結果
  • 事件處理(例如,單擊按鈕時執(zhí)行操作)
  • 測量或更改元素的樣式

當然,jQuery 的功能遠不止這些,但這些用途(至少在我看來)涵蓋了最常見的用例。還要注意,上述列表中有很多交叉關聯(lián)。那么,我們應該從逐一比較每個功能開始嗎?不,別著急。讓我們先介紹 Vue 應用程序的主要區(qū)別。

定義 Vue 的“作用范圍”

當我們將 jQuery 添加到頁面時,我們實際上是在 JavaScript 代碼中添加了一把瑞士軍刀,用于處理常見的 Web 開發(fā)任務。我們可以按照我們認為合適的任何順序執(zhí)行任何用例。例如,客戶今天可能需要表單驗證,然后在一個月左右的時間里,要求在網(wǎng)站的頁眉中添加一個基于 Ajax 的搜索表單。

Vue 在這方面有一個顯著的區(qū)別。在開始使用 Vue 項目時,我們首先定義要在 DOM 中關注的“區(qū)域”。因此,讓我們考慮一個簡單的原型網(wǎng)頁:

<header>
  花哨的頁眉內容
</header>
<div id="sidebar">
  一些側邊欄內容
</div>

<main>
  <p id="main-content">
    主要的網(wǎng)站內容,非常重要的內容……
  </p>
  <div id="loginForm">
    當然還有登錄表單
  </div>
</main>

在典型的 jQuery 應用程序中,我們可能會編寫代碼來處理頁眉、側邊欄和登錄表單等。沒什么大不了的:

$(document).ready(function() {

  $('header') // 做一些事情...

  $('#sidebar') // 做一些事情...

  $('#loginForm') // 做一些事情...

});

在 Vue 應用程序中,我們首先指定要處理的內容。假設我們的客戶首先要求向 loginForm 元素添加驗證。我們的 Vue 代碼將指定這一點:

new Vue({
  el: '#loginForm',
  // 代碼在這里...
});

這意味著如果客戶后來決定向側邊欄添加一些內容,我們通常會添加一個第二個 Vue 應用程序:

new Vue({
  el: '#loginForm',
  // 代碼在這里...
});

new Vue({
  el: '#sidebar',
  // 代碼在這里...
});

這是壞事嗎?絕對不是。我們立即獲得了封裝的好處。如果我們意外地使用了具有通用名稱的變量(我們都做過),我們不必擔心與代碼的其他部分發(fā)生沖突。當客戶以后添加另一個請求時,像這樣將我們獨特的、邏輯的 Vue 代碼集分開,讓我們安心,不用擔心它們會互相干擾。

所以,這是一件好事。但是當我第一次開始使用 Vue 時,它確實讓我停頓了一下?,F(xiàn)在,讓我們來看我們的用例。

在 DOM 中查找元素

你會發(fā)現(xiàn)另一個有趣或令人害怕的方面是如何“在 DOM 中查找元素”。這有點含糊,但讓我們考慮一個具體的例子。我們有一個按鈕,當單擊它時,我們會讓某些事情發(fā)生。這是一個簡化的示例:

<button id="myButton">點擊我!</button>
$(document).ready(function() {

  $('#myButton').click(function() {
    alert(1);
  });

});

現(xiàn)在讓我們將其與 Vue 的實現(xiàn)方式進行比較:

<div id="app">
  <button>點擊我!</button>
</div>
const app = new Vue({
  el: '#app',
  methods: {
    doSomething: function() {
      alert(1);
    }
  }
});

Vue 應用程序比較冗長,但請注意,標記之間如何直接連接操作(“click”)和將要調用的函數(shù)。Vue 的代碼與 DOM 沒有關聯(lián)(除了 el 部分,我們在其中定義它需要工作的地方)。這很容易成為最讓我信服 Vue 的事情之一——它更容易理解正在發(fā)生的事情。此外,我不必太擔心 ID 值和選擇器。如果我更改按鈕的類或 ID,我不需要返回到我的代碼中并擔心更新選擇器。

讓我們考慮另一個示例:查找和更改 DOM 中的文本。想象一下,單擊該按鈕后,現(xiàn)在會更改 DOM 另一部分的文本。

<button id="myButton">點擊我!</button>
$(document).ready(function() {

  $('#myButton').click(function() {
    $('#result').text('你點擊了我,謝謝!');
  });

});

我添加了一個新的 span,現(xiàn)在,當單擊按鈕時,我們使用另一個選擇器來查找它,并使用 jQuery 實用程序方法來更改其內部的文本?,F(xiàn)在考慮 Vue 版本:

<div id="app">
  <button>點擊我!</button>
  <span>{{ resultText }}</span>
</div>
const app = new Vue({
  el: '#app',
  data: {
    resultText: ''
  },
  methods: {
    doSomething: function() {
      this.resultText = '你點擊了我,謝謝!';
    }
  }
});

在此示例中,我們使用 Vue 的模板語言(突出顯示的行)來指定我們要在 span 內渲染一個變量,在本例中為 resultText。現(xiàn)在,當單擊按鈕時,我們更改該值,span 的內部文本將自動更改。

順便說一句,Vue 支持 v-on 屬性的簡寫,因此示例中的按鈕可以用 @click="doSomething" 來代替。

讀取和寫入表單變量

處理表單可能是我們可以用 JavaScript 完成的最常見和最有用的事情之一。甚至在 JavaScript 之前,我早期的大部分“Web 開發(fā)”都是編寫 Perl 腳本以處理表單提交。作為接受用戶輸入的主要方式,表單一直對 Web 至關重要,并且在相當長的一段時間內可能仍然如此。讓我們考慮一個讀取一些表單字段并設置另一個字段的簡單 jQuery 示例:


=
$(document).ready(function() {
  let $first = $('#first');
  let $second = $('#second');
  let $sum = $('#sum');
  let $button = $('#sumButton');

  $button.on('click', function(e) {
    e.preventDefault();
    let total = parseInt($first.val(), 10)   parseInt($second.val(), 10);
    $sum.val(total);
  });
});

這段代碼演示了 jQuery 如何通過 val() 方法讀取和寫入。我們最終從 DOM 中獲取四個項目(所有三個表單字段和按鈕),并使用簡單的數(shù)學運算來生成結果?,F(xiàn)在考慮 Vue 版本:


=
new Vue({
  el: '#myForm',
  data: {
    first: 0,
    second: 0,
    sum: 0
  },
  methods: {
    doSum: function() {
      this.sum = this.first   this.second;
    }
  }
})

這引入了一些有趣的 Vue 快捷方式。首先,v-model 是 Vue 如何在 DOM 和 JavaScript 中的值之間創(chuàng)建雙向數(shù)據(jù)綁定的方式。數(shù)據(jù)塊變量將自動與表單字段同步。更改數(shù)據(jù),表單就會更新。更改表單,數(shù)據(jù)就會更新。.number 是一個標志,指示 Vue 將表單字段的繼承字符串值視為數(shù)字。如果我們省略它并進行加法運算,我們將看到字符串加法而不是算術運算。我已經(jīng)使用 JavaScript 近一個世紀了,仍然會搞砸這個。

另一個巧妙的“技巧”是 @click.prevent。首先,@click 定義按鈕的點擊處理程序,然后 .prevent 部分阻止瀏覽器提交表單的默認行為(相當于 event.preventDefault())。

最后一點是綁定到該按鈕的 doSum 方法的添加。請注意,它只是使用數(shù)據(jù)變量(Vue 在 this 范圍內提供)。

雖然這主要是我個人的感受,但我真的很喜歡在 Vue 中編寫時腳本中缺少查詢選擇器,以及 HTML 如何更清晰地說明它在做什么。

最后,我們甚至可以完全擺脫按鈕:


=
new Vue({
  el: '#myForm',
  data: {
    first: 0,
    second: 0
  },
  computed: {
    sum: function() {
      return this.first   this.second;
    }
  }
})

Vue 的一個更酷的特性是計算屬性。它們是虛擬值,可以識別其派生值何時更新。在上面的代碼中,只要兩個表單字段中的任何一個發(fā)生更改,sum 就會更新。這在表單字段之外也能工作。我們可以像這樣渲染 sum:

總計是 {{sum}}。

使用 Ajax

jQuery 使使用 Ajax 變得多么容易,這值得稱贊。事實上,我可以說我“原生”的方式使用 Ajax 的次數(shù)可能總共只有一次。(如果您好奇,您可以查看 XMLHttpRequest 的規(guī)范,并且可能會很高興您自己避免了它。)jQuery 的簡單 $.get(...) 方法在很多情況下都有效,當需要更復雜的東西時,$.ajax() 也使其變得很容易。jQuery 做得很好的另一件事是它處理 JSONP 請求的方式。雖然現(xiàn)在使用 CORS 大多不需要 JSONP,但 JSONP 是一種處理對不同域上的 API 進行請求的方式。

那么,Vue 為您做了什么來使 Ajax 更容易呢?什么也沒有!

好的,這聽起來很可怕,但實際上并非如此。有很多選項可用于處理 HTTP 請求,而 Vue.js 采取了一種更不可知論的方法,讓我們開發(fā)者自己決定如何處理它。所以是的,這確實意味著更多工作,但我們有一些很棒的選擇。

第一個要考慮的是 Axios,這是一個基于 Promise 的庫,在 Vue 社區(qū)中非常流行。以下是它在行動中的一個簡單示例(取自其自述文件):

axios.get('/user?ID=12345')
  .then(function (response) {
    // 處理成功
    console.log(response);
  })
  .catch(function (error) {
    // 處理錯誤
    console.log(error);
  })
  .then(function () {
    // 始終執(zhí)行
  });

Axios 當然支持 POST 請求,并讓我們指定標頭以及許多其他選項。

雖然 Axios 在 Vue 開發(fā)人員中非常流行,但我并沒有真正喜歡它。(至少現(xiàn)在還沒有。)相反,我更喜歡 Fetch。Fetch 不是一個外部庫,而是一種執(zhí)行 HTTP 請求的 Web 標準方式。Fetch 在大約 90% 的瀏覽器中都具有很好的支持,但這意味著它并非完全安全,但如果需要,我們始終可以使用 polyfill。

雖然這完全超出了我們在這里討論的范圍,但 Kingsley Silas 已經(jīng)編寫了一份關于使用 Axios 和 Fetch 與 React 的優(yōu)秀指南。

與 Axios 一樣,F(xiàn)etch 也是基于 Promise 的,并且具有友好的 API:

fetch('http://example.com/movies.json')
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(JSON.stringify(myJson));
  });

Axios 和 Fetch 都涵蓋所有類型的 HTTP 請求,因此任何一種都適合任何數(shù)量的需求。讓我們來看一個簡單的比較。這是一個使用 Star Wars API 的簡單 jQuery 演示。

<h1>星球大戰(zhàn)電影</h1>
    $(document).ready(function() {
      $.get('https://swapi.com/api/films', function(res) {
        let list = '';
        res.results.forEach(function(r) {
          list  = `
  • ${r.title}
  • `; }); $('#films').html(list); }); });

    在上面的示例中,我使用 $.get 來訪問 API 并返回電影列表。然后我使用該數(shù)據(jù)生成一個作為 li 標簽元素的標題列表,并將其全部插入到 ul 塊中。

    現(xiàn)在,讓我們考慮使用 Vue 的示例:

    <h1>星球大戰(zhàn)電影</h1>
    • {{ film.title }}
    const app = new Vue({
      el: '#app',
      data: {
        films: []
      },
      created() {
        fetch('https://swapi.com/api/films')
          .then(res => res.json())
          .then(res => {
            this.films = res.results;
          });
      }
    })

    這最好的部分可能是 v-for 模板的使用。請注意,Vue 不關心布局(至少是 JavaScript)。數(shù)據(jù)是從 API 中獲取的。它被分配了一個變量。布局負責顯示它。我一直討厭在我的 JavaScript 中使用 HTML,雖然 jQuery 存在解決這個問題的方案,但將其烘焙到 Vue 中使其成為自然的選擇。

    一個完整的(雖然有點瑣碎)示例

    為了更深入地了解,讓我們考慮一個更真實的示例。我們的客戶要求我們?yōu)楫a(chǎn)品 API 構建一個高級的、支持 Ajax 的前端搜索界面。功能列表包括:

    • 支持按名稱和產(chǎn)品類別進行篩選
    • 表單驗證,要求我們提供搜索詞或類別
    • 當 API 正在訪問時,向用戶顯示消息并禁用提交按鈕
    • 完成后,處理報告未顯示任何產(chǎn)品或列出匹配項

    讓我們從 jQuery 版本開始。首先是 HTML:

    
    

    有一個帶有我們的兩個過濾器和兩個 div 的表單。一個在搜索或報告錯誤時用作臨時狀態(tài),另一個用于呈現(xiàn)結果?,F(xiàn)在,查看代碼。

    // ... (代碼太長,此處省略) ...

    代碼首先為我們要使用的每個 DOM 項目創(chuàng)建一組變量——表單字段、按鈕和 div。邏輯的核心位于按鈕的點擊處理程序中。我們進行驗證,如果一切正常,則對 API 進行 POST 請求。當它返回時,如果沒有任何匹配項,我們要么呈現(xiàn)結果,要么顯示消息。

    現(xiàn)在讓我們考慮 Vue 版本。同樣,讓我們從布局開始:

    <div id="app">
      <form>
        <p>
          <label for="search">搜索</label>
          <input type="text" v-model="search" id="search">
        </p>
        <p>
          <label for="category">類別</label>
          <select v-model="category" id="category">
            <option value="">所有</option>
            <option value="Food">食品</option>
            <option value="Games">游戲</option>
          </select>
        </p>
        <button :disabled="searchBtnDisabled">搜索</button>
      </form>
    
      <div v-html="status"></div>
      <ul v-if="results"><li v-for="result in results">{{ result.name }}</li></ul>
    </div>

    從頂部開始,更改包括:

    • 將布局包裝在一個 div 中,以便讓 Vue 知道在哪里工作。
    • 使用 v-model 用于表單字段,以便輕松處理數(shù)據(jù)。
    • 使用 @click.prevent 來處理主要搜索操作。
    • 使用 :disabled 將按鈕是否禁用的狀態(tài)綁定到 Vue 應用程序中的值(我們稍后會看到它的作用)。
    • status 值與之前的示例略有不同。雖然 jQuery 有一個特定方法來設置 DOM 項目中的文本,另一個方法用于 HTML,但 Vue 在將 HTML 分配給要呈現(xiàn)的值時需要使用 v-html。如果我們嘗試使用帶有 HTML 的 {{status}},則標簽將被轉義。
    • 最后,使用 v-if 有條件地呈現(xiàn)結果列表以及 v-for 來處理迭代。

    現(xiàn)在讓我們看看代碼。

    // ... (代碼太長,此處省略) ...

    第一個值得一提的代碼塊是一組數(shù)據(jù)字段。有些映射到表單字段,而另一些映射到結果、狀態(tài)消息等。searchProducts 方法處理與 jQuery 版本中大部分相同的內容,但總的來說,直接與 DOM 綁定的代碼要少得多。例如,即使我們知道結果列在一個無序列表中,代碼本身也不關心這一點。它只是分配值,而標記負責呈現(xiàn)它。總的來說,與 jQuery 代碼相比,JavaScript 代碼更關注邏輯,這“感覺”上是更好的關注點分離。

    jQuery 已逝,Vue 長存!

    好吧,這有點夸張了。正如我在開頭所說,如果你喜歡使用 jQuery 并且它對你有用,我絕對認為你不應該更改任何內容。

    但是,我可以說,對于習慣使用 jQuery 的人來說,Vue 感覺像是很好的“下一步”。Vue 支持復雜的應用程序,并且具有用于腳手架和構建項目的強大的命令行工具。但是對于更簡單的任務,Vue 作為一種很好的“現(xiàn)代 jQuery”替代品,已成為我的首選開發(fā)工具!

    以上是從jQuery轉到Vue的詳細內容。更多信息請關注PHP中文網(wǎng)其他相關文章!

    本站聲明
    本文內容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內容,請聯(lián)系admin@php.cn

    熱AI工具

    Undress AI Tool

    Undress AI Tool

    免費脫衣服圖片

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驅動的應用程序,用于創(chuàng)建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用于從照片中去除衣服的在線人工智能工具。

    Clothoff.io

    Clothoff.io

    AI脫衣機

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的代碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    功能強大的PHP集成開發(fā)環(huán)境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網(wǎng)頁開發(fā)工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級代碼編輯軟件(SublimeText3)

    熱門話題

    Laravel 教程
    1597
    29
    PHP教程
    1488
    72
    CSS教程,用于創(chuàng)建加載旋轉器和動畫 CSS教程,用于創(chuàng)建加載旋轉器和動畫 Jul 07, 2025 am 12:07 AM

    創(chuàng)建CSS加載旋轉器的方法有三種:1.使用邊框的基本旋轉器,通過HTML和CSS實現(xiàn)簡單動畫;2.使用多個點的自定義旋轉器,通過不同延遲時間實現(xiàn)跳動效果;3.在按鈕中添加旋轉器,通過JavaScript切換類來顯示加載狀態(tài)。每種方法都強調了設計細節(jié)如顏色、大小、可訪問性和性能優(yōu)化的重要性,以提升用戶體驗。

    解決CSS瀏覽器兼容性問題和前綴 解決CSS瀏覽器兼容性問題和前綴 Jul 07, 2025 am 01:44 AM

    處理CSS瀏覽器兼容性和前綴問題需理解瀏覽器支持差異并合理使用廠商前綴。1.了解常見問題如Flexbox、Grid支持不一,position:sticky失效,動畫表現(xiàn)不同;2.查閱CanIuse確認特性支持情況;3.正確使用-webkit-、-moz-、-ms-、-o-等廠商前綴;4.推薦使用Autoprefixer自動添加前綴;5.安裝PostCSS并配置browserslist指定目標瀏覽器;6.構建時自動處理兼容性;7.老項目可用Modernizr檢測特性;8.不必追求所有瀏覽器一致,確

    顯示:內聯(lián),顯示:塊和顯示:內聯(lián)塊之間有什么區(qū)別? 顯示:內聯(lián),顯示:塊和顯示:內聯(lián)塊之間有什么區(qū)別? Jul 11, 2025 am 03:25 AM

    Themaindifferencesbetweendisplay:inline,block,andinline-blockinHTML/CSSarelayoutbehavior,spaceusage,andstylingcontrol.1.Inlineelementsflowwithtext,don’tstartonnewlines,ignorewidth/height,andonlyapplyhorizo??ntalpadding/margins—idealforinlinetextstyling

    使用CSS剪輯路徑創(chuàng)建自定義形狀 使用CSS剪輯路徑創(chuàng)建自定義形狀 Jul 09, 2025 am 01:29 AM

    使用CSS的clip-path屬性可以裁剪元素為自定義形狀,如三角形、圓形缺口、多邊形等,無需依賴圖片或SVG。其優(yōu)勢包括:1.支持circle、ellipse、polygon等多種基本形狀;2.可響應式調整,適配移動端;3.易于動畫化,可結合hover或JavaScript實現(xiàn)動態(tài)效果;4.不影響布局流,僅裁剪顯示區(qū)域。常見用法如圓形裁剪clip-path:circle(50pxatcenter)和三角形裁剪clip-path:polygon(50%0%,1000%,00%)。注意

    造型與CSS不同訪問的鏈接 造型與CSS不同訪問的鏈接 Jul 11, 2025 am 03:26 AM

    設置訪問過鏈接的樣式能提升用戶體驗,尤其在內容密集型網(wǎng)站中幫助用戶更好導航。1.使用CSS的:visited偽類可定義已訪問鏈接樣式,如顏色變化;2.注意瀏覽器出于隱私限制僅允許修改部分屬性;3.顏色選擇應與整體風格協(xié)調,避免突兀;4.移動端可能不顯示該效果,建議結合其他視覺提示如icon輔助標識。

    如何使用CSS創(chuàng)建響應式圖像? 如何使用CSS創(chuàng)建響應式圖像? Jul 15, 2025 am 01:10 AM

    要使用CSS創(chuàng)建響應式圖片,主要可通過以下方法實現(xiàn):1.使用max-width:100%和height:auto讓圖片在保持比例的同時自適應容器寬度;2.結合HTML的srcset和sizes屬性智能加載適配不同屏幕的圖片源;3.利用object-fit和object-position控制圖片裁剪與焦點展示。這些方法共同確保圖片在不同設備上清晰、美觀地呈現(xiàn)。

    什么是常見的CSS瀏覽器不一致? 什么是常見的CSS瀏覽器不一致? Jul 26, 2025 am 07:04 AM

    不同瀏覽器對CSS解析存在差異,導致顯示效果不一致,主要包括默認樣式差異、盒模型計算方式、Flexbox和Grid布局支持程度及某些CSS屬性行為不一致。1.默認樣式處理不一致,解決方法是使用CSSReset或Normalize.css統(tǒng)一初始樣式;2.舊版IE的盒模型計算方式不同,建議統(tǒng)一使用box-sizing:border-box;3.Flexbox和Grid在邊緣情況或舊版本中表現(xiàn)有差異,應多測試并使用Autoprefixer;4.某些CSS屬性行為不一致,需查閱CanIuse并提供降級

    揭開CSS單元的神秘面紗:PX,EM,REM,VW,VH比較 揭開CSS單元的神秘面紗:PX,EM,REM,VW,VH比較 Jul 08, 2025 am 02:16 AM

    CSS單位的選擇取決于設計需求和響應式要求。1.px用于固定尺寸,適合精確控制但缺乏彈性;2.em是相對單位,受父元素影響易導致級聯(lián)問題,rem則基于根元素更穩(wěn)定,適合全局縮放;3.vw/vh基于視口大小,適合響應式設計,但需注意極端屏幕下的表現(xiàn);4.選擇時應根據(jù)是否需要響應式調整、元素層級關系及視口依賴程度來決定,合理搭配使用可提升布局靈活性與維護性。

    See all articles