成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue.js 中的片段使用方法

開發 前端
在本文中,你學習了如何在 Vue 中使用片段,并了解了為什么在寫代碼時要考慮可訪問性是非常重要的。

在 Vue 中實現可訪問性

為了實現 Web 上的可訪問性,你需要設計每個人都可以使用的頁面、工具和技術。

這里的“所有人”包括有著聽覺、認知、神經、身體、語言和視覺障礙的人。

為了使諸如屏幕閱讀器之類的輔助技術能夠解釋網頁和應用程序,無障礙支持是必需的。為了使這些技術起作用,開發人員需要考慮可訪問性。

開始之前

本文適用于使用 Vue.js 的所有級別的前端開發人員,因此不需要了解初學者的概念和安裝過程即可理解這些概念。

在開始之前,這是你應該已經具備的一些先決條件。

你需要:

  • 安裝了 Node.js 10.x 或更高版本。你可以通過在終端或命令提示符下運行 node -v來驗證。
  • 安裝了 Node Package Manager 6.7 或更高版本(NPM)。
  • 代碼編輯器:強烈建議使用 Visual Studio 代碼。
  • Vue 的最新版本已在你的計算機上全局安裝。

在你的計算機上安裝了 Vue CLI 3.0。為此,請先卸載舊的CLI版本:

  1. npm uninstall -g vue-cli 

然后安裝新的:

  1. npm install -g @vue/cli 

要么

  • 在這里下載 Vue 入門項目(https://github.com/viclotana/vue-canvas)
  • 解壓縮下載的項目

進入解壓目錄運行以下命令使所有依賴項保持最新:

  1. npm install 

問題:多個根節點

在 Vue 組件的模板部分內構建內容時,你可能會注意到,模板標簽內只能有一個根 HTML 標簽。

在這個根 HTML 標記內,你可以根據需要創建任意數量的子節點,因此在 Vue 組件中不能有多個根節點。

如果你用 VS Code 打開了項目,請導航到 src 文件夾,然后導航到 components 文件夾,打開 app.js 文件。你的 app.js文件應如下所示:

  1. <template> 
  2.   <div id="app"> 
  3.     <img alt="Vue logo" src="./assets/logo.png"> 
  4.     <Test msg="Welcome to Your Vue.js App"/> 
  5.   </div> 
  6. </template> 
  7. <script> 
  8. import Test from './components/Test.vue' 
  9. export default { 
  10.   name: 'app', 
  11.   components: { 
  12.     Test 
  13.   } 
  14. </script> 
  15. <style> 
  16. #app { 
  17.   font-family: 'Avenir', Helvetica, Arial, sans-serif; 
  18.   -webkit-font-smoothing: antialiased; 
  19.   -moz-osx-font-smoothing: grayscale; 
  20.   text-align: center; 
  21.   color: #2c3e50; 
  22.   margin-top: 60px; 
  23. </style> 

 

你可以看到 div 是模板中唯一的根節點。如果你嘗試像這樣添加額外的根節點:

  1. <template> 
  2. <span> 
  3.   <div id="app"> 
  4.     <img alt="Vue logo" src="./assets/logo.png"> 
  5.     <Test msg="Welcome to Your Vue.js App"/> 
  6.   </div> 
  7.   <div> 
  8.     <h1>Header inside root node 2</h1> 
  9.   </div> 
  10. </span> 
  11. </template> 
  12. <script> 
  13. import Test from './components/Test.vue' 
  14. export default { 
  15.   name: 'app', 
  16.   components: { 
  17.     Test 
  18.   } 
  19. </script> 
  20. <style> 
  21. #app { 
  22.   font-family: 'Avenir', Helvetica, Arial, sans-serif; 
  23.   -webkit-font-smoothing: antialiased; 
  24.   -moz-osx-font-smoothing: grayscale; 
  25.   text-align: center; 
  26.   color: #2c3e50; 
  27.   margin-top: 60px; 
  28. </style> 

 

你會看到,保存時,Vue 編譯器將會提示有關具有多個根節點的錯誤。

額外的節點包裝器技術

為了找到解決方法,Vue 開發人員經常會創建一個額外的(而且幾乎是不必要的)根節點包裝器,在其中可以創建適合的子節點。

這里的標簽可以是 span 或 div 標簽。大多數 Vue 開發人員經常使用 div 標簽來確保他們的代碼塊不會產生導致破壞程序的錯誤。

這些額外的標簽除了防止產生錯誤外,什么也不做。

  1. <template> 
  2. <span> 
  3.   <div id="app"> 
  4.     <img alt="Vue logo" src="./assets/logo.png"> 
  5.     <Test msg="Welcome to Your Vue.js App"/> 
  6.   </div> 
  7.   <div> 
  8.     <h1>Header inside root node 2</h1> 
  9.   </div> 
  10. </span> 
  11. </template> 
  12. <script> 
  13. import Test from './components/Test.vue' 
  14. export default { 
  15.   name: 'app', 
  16.   components: { 
  17.     Test 
  18.   } 
  19. </script> 
  20. <style> 
  21. #app { 
  22.   font-family: 'Avenir', Helvetica, Arial, sans-serif; 
  23.   -webkit-font-smoothing: antialiased; 
  24.   -moz-osx-font-smoothing: grayscale; 
  25.   text-align: center; 
  26.   color: #2c3e50; 
  27.   margin-top: 60px; 
  28. </style> 

這個方法的問題在于它不可訪問。

現在根據 HTML 指南,諸如列表項之類的語義標簽應該使用有序或無序列表標簽進行包裝。同樣,table 項應由 table 標簽包裝為父標簽。

Demo

讓我們用 App.vue 組件來渲染將要在 Test.vue 組件中創建的列表。

打開你的 App.vue 文件,然后在模板部分中復制以下代碼:

  1. <template> 
  2. <span> 
  3.   <div id="app"> 
  4.     <img alt="Vue logo" src="./assets/logo.png"> 
  5.     <ol> 
  6.       <Test /> 
  7.     </ol> 
  8.      
  9.   </div> 
  10. </span> 
  11. </template> 

然后,在Test.vue組件中,將列表項放入模板部分,如下所示:

  1. <template> 
  2. <div> 
  3.    <li>1. Array method</li> 
  4.    <li>2. Extra tag method</li> 
  5.    <li>3. fragments</li> 
  6.   </div> 
  7. </template> 

上面的代碼塊不會由編譯器返回錯誤。實際上,它將被傳遞到 App.vue 組件中以正確渲染列表。

但是,如果你在 devtools 中檢查元素,則會發現它不返回語義 HTML。

如果不遵循這個語義,則你的 HTML 代碼可能會正常運行,但不會被屏幕閱讀器或語音轉換之類的輔助設備接收。

這就是為什么這種方法(被廣泛使用)現在不被接受的原因。通常人們傾向于編寫可訪問的代碼。

解決方案:片段

這個概念是 React 團隊發布版本 16 時提出的。這是針對開發人員行為造成的可訪問性差距的解決方案。

該團隊找到了一種創建 HTML 標記的方法,該方法不會被 DOM 讀取為節點,并將其稱為片段。

它的工作原理與 div 或 span 標記完全相同,但不會改變代碼的整體結構,因此保持了 DOM 樹的語義。

React 片段語法

  1. render() { 
  2.     return (  
  3.        <React.fragment > 
  4.          <ChildA / > 
  5.          <ChildB / > 
  6.          <ChildC / > 
  7.        </React.fragment> 
  8.     ); 

在DOM中,如下所示:

  1. <ChildA / > 
  2. <ChildB / > 
  3. <ChildC / > 

片段是不可見的包裝器標簽,不影響 DOM 的節點結構,從而實現了可訪問性。

Vue 中的 片段

Vue團隊尚未完成正式的片段功能,但是 Vue 社區成員 Julien Barbay 構建了一個很棒的插件。

這個插件就像包裝器一樣。然后在 Vue 編譯時,它會在 DOM 上被注釋掉。

這是在 Vue 2.x 中使用片段的非常有效的方法

語法如下所示:

  1. <Fragment > 
  2.   <ChildA / > 
  3.   <ChildB / > 
  4.   <ChildC / > 
  5.  </Fragment> 

在 DOM 中,其渲染結果如下:

  1. <!--Fragment--> 
  2.   <ChildA / > 
  3.   <ChildB / > 
  4.   <ChildC / > 
  5.  <!--Fragment--> 

你可以看到有兩行被注釋掉了,因此 DOM 具有語義并且可以訪問代碼。要使用它,請先在你的 Vue 項目中安裝插件:

  1. npm install -s vue-fragment 

然后導入它,你就可以在 Test.vue 文件中使用了,如下所示:

  1. <template> 
  2. <fragment> 
  3.    <li>1. Array method</li> 
  4.    <li>2. Extra tag method</li> 
  5.    <li>3. fragments</li> 
  6. </fragment> 
  7. </template> 
  8. <script> 
  9. import { Fragment } from 'vue-fragment' 
  10. export default { 
  11.   name: 'Test', 
  12.   components: { Fragment }, 
  13.   props: { 
  14.     msg: String 
  15.   } 
  16. </script> 

 

你可以看到div標簽已被片段替換。現在,整個演示文稿都可以訪問了。

總結

在本文中,你學習了如何在 Vue 中使用片段,并了解了為什么在寫代碼時要考慮可訪問性是非常重要的。

Vue 團隊已承諾在即將發布的 Vue v3 中引入片段功能。

Julien 的插件是一個非常有用的插件,你現在就能用。

責任編輯:趙寧寧 來源: 前端先鋒
相關推薦

2010-10-09 10:30:03

JS event

2017-07-14 10:10:08

Vue.jsMixin

2019-07-26 14:40:58

Vue.jsSocket.IO前端

2021-02-04 16:08:01

RoughViz可視化圖表

2021-04-17 18:24:04

Vue.js嵌套路由前端

2021-04-15 08:15:27

Vue.js源碼方法

2022-12-01 17:13:44

2018-04-04 10:32:13

前端JavascriptVue.js

2016-11-04 19:58:39

vue.js

2017-07-04 17:55:37

Vue.js插件開發

2023-03-29 14:25:08

Vue.js前端框架

2020-04-01 08:40:44

Vue.jsweb開發

2020-09-16 06:12:30

Vue.js 3.0Suspense組件前端

2017-08-30 17:10:43

前端JavascriptVue.js

2018-07-10 15:35:33

Vue前端架構

2022-01-19 22:18:56

Vue.jsVue SPA開發

2017-07-11 18:00:21

vue.js數據組件

2017-07-20 11:18:22

Vue.jsMVVMMVC

2024-05-13 08:04:26

Vue.jsWeb應用程序

2023-12-11 18:20:21

Vue.js事件機制傳遞
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区二区久久 | 久久婷婷国产麻豆91 | 久久高清 | 国产在线一| 国产人成在线观看 | 久久99视频免费观看 | 精品视频一区二区三区在线观看 | 视频精品一区 | 红桃视频一区二区三区免费 | 欧美1区2区 | 久久国内精品 | 91精品国产综合久久婷婷香蕉 | 在线免费小视频 | 操皮视频| 免费能直接在线观看黄的视频 | 日韩毛片中文字幕 | 国产成人精品综合 | xxxxx黄色片| 色999日韩 | 欧美激情一区 | 中文字幕一区二区三区精彩视频 | 精品一区二区三区在线播放 | 国产精品自拍啪啪 | 日本在线一二 | 久久天天 | 久久国| 一区二区在线观看av | 欧美日韩中文在线 | 国精品一区二区 | 亚洲天堂av在线 | 一级黄在线观看 | 国产一区二区三区 | 久久精品亚洲精品 | 国产精品一区二区在线 | 成人av电影在线观看 | 久久香蕉精品视频 | 国产a区| 国产伦精品一区二区 | 色婷婷在线视频 | 久久精品视频一区二区 | 国产精品观看 |