搜尋
首頁web前端js教程探索Vue.jscomponent內容實現

現在來系統地學習一下Vue(參考vue.js官方文檔):

Vue.js是一個建構資料驅動的web介面的函式庫,其目標是實現回應的資料綁定和組合的試圖元件。

Vue.js擁抱資料驅動的視圖概念,這意味著我們能在普通的HTML模板中使用特殊的用法將DOM「綁定」到底層資料。一旦創建了綁定,DOM將於資料保持同步。

探索Vue.jscomponent內容實現

以下參考代碼與上面的模型相對應

<!-- 这是我们的 View -->
<div id="example-1">
   Hello {{ name }}!
</div>
// 这是我们的 Model
var exampleData = {
   name: &#39;Vue.js&#39;
}
  
// 创建一个 Vue 实例或 "ViewModel"
// 它连接 View 与 Model
var exampleVM = new Vue({
   el: &#39;#example-1&#39;,  // 在一个id为&#39;example-1&#39;的实体上挂载
   data: exampleData  // 数据流
})

通常我們會把Model寫在Vue實例當中,下面寫法與上面寫法效果一樣:

<!-- 这是我们的 View -->
<div id="example-1">
   Hello {{ name }}!  <!--- Vue的数据模型用{{datamodel}}包裹起来 --->
</div>
  
// 创建一个 Vue 实例或 "ViewModel"
// 它连接 View 与 Model<br><script>
var exampleVM = new Vue({
   el: &#39;#example-1&#39;,  // 在一个id为&#39;example-1&#39;的实体上挂载
   data: {
       name: &#39;Vue.js&#39;
      } // 数据流
})<br></script>

這樣一段程式執行後,在#example-1這個控制項中就會顯示'Hello Vue.js!'。

下面來看看指令(Directives):
指令是特殊的帶有前綴v- 的特性,指令的值限定為綁定表達式,例如一個if的指令:

hello!


還有綁定指令,即將某些屬性值與一些值相綁定,例如:


這裡省略了“v-bind”,使得input的屬性值賦值具有“計算”的效果。

計算屬性

這裡介紹一下$watch的用法,用於當一個資料需要根據其他的資料而變化時的情況:

<script><br>var vm = new Vue({
 el: &#39;#demo&#39;,
 data: {
  firstName: &#39;Foo&#39;,
  lastName: &#39;Bar&#39;,
  fullName: &#39;Foo Bar&#39;
 }
})<br></script>
  
vm.$watch(&#39;firstName&#39;, function (val) { // 当firstname改变时,立马更新vm.fullname
 this.fullName = val + &#39; &#39; + this.lastName
})
  
vm.$watch(&#39;lastName&#39;, function (val) {  // 当lastname改变时,立马更新vm.fullname
 this.fullName = this.firstName + &#39; &#39; + val
})

在這裡,所有的資料的物件都可以透過vm.firstname等來訪問。

v-model  

顧名思義,就是Vue當中的資料模型,它用來綁定Vue實例中的資料:

<!--- bi-direction bound --->
<div id="app">
  <p>{{message}}</p>
  <input v-model="message"> <!--Model,input输入的数据会立即反馈到Vue实例中--> 
</div>
<script>
  new Vue({
    el: &#39;#app&#39;,  // View
    data: {
      message: &#39;Hello Vue.js&#39;
    }
  })
</script>

例如要用來綁定一個表單控制項,就是把選擇的值顯示出來:

<!---    表单控件绑定-单选 --->
<div id="myselect">  // 外面这一层我一开始没有加,然后就出错了,el好像一般是挂载在<div>构件上
<select v-model="selected"> // data的数据类型是selected,值是选取的值
  <option seleceted>A</option>
  <option>B</option>
  <option>C</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
  
<script>
  new Vue({
    el: &#39;#myselect&#39;,
    data:{
      selected:[]
    }
  })
</script>

v-if, v-else    

這個指令可以用的很靈活,例如我在表單中產生新題目,有「單選題」、「多重選擇題」、「文本題」三種,那麼針對不同的題目應該顯示的控制項有所不同,這時可以使用如下語法:

<div v-if="questItem.type === &#39;textarea&#39;"> // 注意是三个等号
    <textarea></textarea>
</div>
<div v=else>
    <div></div>
</div>

v-for

這個用於對數組元素的遍歷,舉個例子: 

<ul id="demo">
  <li
    v-for="item in items"
    class="item-{{$index}}">  <!--- $index指的是当前数组元素在数组中的位置 --->
    {{parentMessage}} - {{$index}} - {{item.message}} <!--一个view结构-->
  </li>
</ul>
<button id="btn1">点击我</button>
<script>
  var demo= new Vue({
    el: &#39;#demo&#39;,
    data:{
      parentMessage: &#39;Parent&#39;,
      items:[
        {message: &#39;Foo&#39;},
        {message: &#39;Bar&#39;}
      ]
    }
  })
</script>

以上代碼的意思是遍歷demo實例中的items數組,將裡面的每一個數組元素('Foo','Bar')分別在

  • 標籤中顯示出來

    為了避免對整個列表進行渲染,經常會使用: track-by = "$index",表示只對目前陣列元素進行操作。

    至此,關於Vue的最基本的東西已經介紹完,需要更多的API資料可以參考: http://cn.vuejs.org/api/ 

    Vue檔案的結構以及資料流的控制

    在vue檔案中,我們經常可以看到這樣的格式:

    <template>
        <div> </div>
    </template>
      
    <script>
        export default{
           data(){ ...
           },
           methods:{ // 自定义方法,可对data进行处理
              method1(){ ... }
              ...    
           },
           components: { ... }
           vuex: {
              getters:{ // 获取store的数据
                questionnaire: state => state.currentQuestionnaire
              }
              actions: { //用来分发数据容器store中mutations方法
                action1(){ dispatch("SET_QUEST", item) } // dispatch用来调用父组件store的"SET_QUEST"方法
                action2(){ ... }
           }
           directives: {
              &#39;my-directive&#39;: {
                bind: function(){ //钩子函数,只调用一次,在指令第一次绑定到元素上时调用 }
                update: function(newValue, oldValue) { //钩子函数,在bind之后以初始值为参数第一次调用,之后每当绑定至变化时调用 }
                unbind: function(){ //钩子函数,只调用一次,在指令从元素上解绑时调用 }
              }
           } 
              // 自定义指令,在<template>中以<div v-my-directives = ""> 方式调用   
         }
    </script>
      
    <style>  </style>

    在methods中經常使用到「this」關鍵字,該關鍵字指向Vue組件實例。

    event.target: 觸發事件的具體控件,不產生冒泡作用,是誰就是誰,這個在鎖定事件觸發的控件時經常用到,比如:

    <div @click.stop = "addItem($event)">
       <span data-type = "radio">单选题</span>
       <span data-type = "checkbox">多选题</span>
       <span data-type = "textarea">文本题</span>
    </div>
      
    <script>
       export default{
          method: {
              addItem(event){
                 let target = event.target
                 if(target.nodeName.toLowerCase() === &#39;span&#39;) { // 当点击了选择的按钮后
                    this.showMask = true  // 显示弹出框
                    this.questItem.type = target.dataset.type  // 设置问题的类型
                 }
          }
       }
    </script>

    最後講講this.$els:一個對象,包含註冊有v-el的DOM元素

    <div class = "promt-header">
      <div>
         <label> 问题名称: </label>
         <input type = "text", placeholder = "请输入标题" v-el: item-title/>
      </div>
    </div>
    <div class = "promt-footer" @click.stop = "handleInput(&event)">
       <button type = "button" data-operation = "confirm"> 确定 </button>
       <button type = "button" data-operation = "cancel"> 取消 </button>
    </div>
      
    <script>
       methods: {
            handleInput(event) {
              let target = event.target
              if(target.nodeName.toLowerCase() !== &#39;button&#39;) {
                return
              }
              let itemTitle = this.$els.itemTitle
              let itemSelections = this.$els.itemSelections
              if(target.dataset.operation === "confirm") {
                if(this.questItem.type === "textarea") {
                  this.addTextarea(itemTitle)
                } else {
                  this.addSelections(itemTitle, itemSelections)
                }
              } else {
                this.handleCancel()
              }
            },
       }
    </script>

    上面的程式碼是不完整的,但是可以看到,v-el把該控制項掛載在一個名字為"item-title"的實體中,我們可以透過this.$els.itemTitle將其提取出來

    要使用該控制項的屬性值(輸入值),可以這樣:

    this.$els.itemTitle.value

    以上就是本文的全部內容,希望對大家的學習有幫助,也希望大家多多支持PHP中文網。

    更多探索Vue.jscomponent內容實作相關文章請關注PHP中文網!

  • 陳述
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    JavaScript的角色:使網絡交互和動態JavaScript的角色:使網絡交互和動態Apr 24, 2025 am 12:12 AM

    JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

    C和JavaScript:連接解釋C和JavaScript:連接解釋Apr 23, 2025 am 12:07 AM

    C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

    從網站到應用程序:JavaScript的不同應用從網站到應用程序:JavaScript的不同應用Apr 22, 2025 am 12:02 AM

    JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

    Python vs. JavaScript:比較用例和應用程序Python vs. JavaScript:比較用例和應用程序Apr 21, 2025 am 12:01 AM

    Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

    C/C在JavaScript口譯員和編譯器中的作用C/C在JavaScript口譯員和編譯器中的作用Apr 20, 2025 am 12:01 AM

    C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

    JavaScript在行動中:現實世界中的示例和項目JavaScript在行動中:現實世界中的示例和項目Apr 19, 2025 am 12:13 AM

    JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

    JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

    JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

    了解JavaScript引擎:實施詳細信息了解JavaScript引擎:實施詳細信息Apr 17, 2025 am 12:05 AM

    理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    VSCode Windows 64位元 下載

    VSCode Windows 64位元 下載

    微軟推出的免費、功能強大的一款IDE編輯器

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強大的PHP整合開發環境

    MantisBT

    MantisBT

    Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    mPDF

    mPDF

    mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),