欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue中的attribute和property的具體使用及區(qū)別

 更新時間:2021年09月28日 15:53:57   作者:龍宇_  
本文主要介紹了vue中的attribute和property的具體使用及區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

作為 attribute 和 property 的 value 及 Vue.js 的相關處理

attribute 和 property 是 Web 開發(fā)中,比較容易混淆的概念,而對于 value,因其特殊性,更易困惑,本文嘗試做一下梳理和例證

attribute 和 property 的概念

簡單的說,attribute 是元素標簽的屬性,property 是元素對象的屬性,例如:

<input id="input" value="test value">
<script>
let input = document.getElementById('input');
console.log(input.getAttribute('value')); // test value
console.log(input.value); // test value
</script>
  • input 的 value attribute 是通過標簽里的 value=“test value” 定義的,可以通過input.getAttribute(‘value') 獲取,可以通過 input.setAttribute(‘value', ‘New Value') 更新
  • input 的 value property 可通過 input.value 獲取和更新,初始值是與 attribute 中的賦值一致的

attribute 和 property 的綁定

如果在最開始的時候,更新 attribute value 的值,property 的值也會隨之改變

但是更新 property value 的值(在文本框輸入或給 input.value 賦新值 ),attribute 的值不會隨之改變,而且此時再更新 attribute 的值,property 的值也不再隨之改變,如此動畫所示,也可訪問此頁面嘗試進行操作

這其實是臟值標記(dirty value flag)在起作用,dirty value flag 的初始值為 false,即 attribute value 的更新默認會改變對應的 property value,但是一旦用戶交互修改了 property value,dirty value flag 的值就變?yōu)?true,即attribute value 的更新就不會改變對應的 property value 了

所以在實際項目中,我們一般都是在處理作為 property 的 value

Vue.js 對 value 的處理

一般情況使用 :value

Vue.js 的 v-bind,一般情況下是在處理 attribute,如果要作為 property 處理的話,需要加上 .prop

不過 v-bind:value 卻大都默認為處理 property 值,因為被強制轉化了,例如:

<input id="input" :value="'test value'" >
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
let input = new Vue({
  el: '#input',
  mounted () {
    console.log(this.$el.getAttribute('value')); // null
    console.log(this.$el.value); // test value
    console.log(this._vnode.data) // {attrs: {id: "input"}, domProps: {value: "test value"}}
  }
});
</script>

可見,Vue.js 將 value 作為 VNode 的 data 中的 domProps 的屬性,而不是 attrs 的屬性,所以掛載后會成為作為 property 的 value

在 Vue.js 源碼中,強制轉化 property 的處理如下:

// src/compiler/parser/index.js
function processAttrs (el) {
...
        if ((modifiers && modifiers.prop) || (
          !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)
        )) {
          addProp(el, name, value, list[i], isDynamic)
        } else {
          addAttr(el, name, value, list[i], isDynamic)
        }

其中 platformMustUseProp 在 web 平臺的定義如下:

// src/platforms/web/util/attrs.js
const acceptValue = makeMap('input,textarea,option,select,progress')
export const mustUseProp = (tag: string, type: ?string, attr: string): boolean => {
  return (
    (attr === 'value' && acceptValue(tag)) && type !== 'button' ||
    (attr === 'selected' && tag === 'option') ||
    (attr === 'checked' && tag === 'input') ||
    (attr === 'muted' && tag === 'video')
  )
}

由上可知,類型不為 button 的 input, textarea, option, select, progress 的 value 會強制作為 property,而不需要設置為 :value.prop

例如 textarea 標簽,其本身其實并不支持 value attribute,所以以下代碼中的 value 的值并不會顯示在多行文本框中

<textarea value="test value"></textarea>

但是在 Vue.js 中, 以下代碼能成功綁定到 value property 并顯示在多行文本框中

<textarea :value="'test value'"></textarea>

特殊情況使用 :value.prop

以上 Vue.js 源碼需要注意的還有,強制作為 property, 還要滿足 !el.component,即不為動態(tài)組件,因為動態(tài)組件的 el.component 的值為其 is attribute 的值

即動態(tài)組件的的 v-bind 默認都是作為 attribute的,如果要作為 property,就要使用 .prop,例如:

<div id="app">
  <component :is="element" :value.prop="'test value'"></component>
  <button @click="change">Change</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
let app = new Vue({
  el: '#app',
  data: {
    element: 'input'
  },
  methods: {
    change () {
      this.element = 'input' === this.element ? 'textarea' : 'input';
    }
  }
});
</script>

如果以上 component 中,刪除 :value.prop 的 .prop,切換到 textarea 時,其值就不會顯示在多行文本框中,可以在此頁面點擊切換標簽查看

總結

  • 作為 attribute 和 property 的 value 的綁定關系會在用戶交互更新值后失效
  • Vue.js 一般使用 :value 即可讓 value 作為 property
  • Vue.js 動態(tài)模版需要使用 :value.prop 才可讓 value 作為 property

到此這篇關于vue中的attribute和property的具體使用及區(qū)別的文章就介紹到這了,更多相關vue attribute property內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue使得大屏自適應的多種方法

    Vue使得大屏自適應的多種方法

    這篇文章主要介紹了Vue使得大屏自適應的多種方法,自適屏幕,始終保持16:9的比例,還一種是使用CSS scale屬性對大屏幕做自適應處理,需要的朋友可以參考下
    2023-10-10
  • element-ui 限制日期選擇的方法(datepicker)

    element-ui 限制日期選擇的方法(datepicker)

    本篇文章主要介紹了element-ui 限制日期選擇的方法(datepicker),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 關于Vue-extend和VueComponent問題小結

    關于Vue-extend和VueComponent問題小結

    這篇文章主要介紹了Vue-extend和VueComponent問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • vuex 多模塊時 模塊內部的mutation和action的調用方式

    vuex 多模塊時 模塊內部的mutation和action的調用方式

    這篇文章主要介紹了vuex 多模塊時 模塊內部的mutation和action的調用方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue移動端裁剪圖片結合插件Cropper的使用實例代碼

    vue移動端裁剪圖片結合插件Cropper的使用實例代碼

    本篇文章主要介紹了vue移動端裁剪圖片結合插件Cropper的使用實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Vue動畫事件詳解及過渡動畫實例

    Vue動畫事件詳解及過渡動畫實例

    通過 Vue.js 的過渡系統(tǒng),可以在元素從 DOM 中插入或移除時自動應用過渡效果。Vue.js 會在適當?shù)臅r機為你觸發(fā) CSS 過渡或動畫,你也可以提供相應的 JavaScript 鉤子函數(shù)在過渡過程中執(zhí)行自定義的 DOM 操作
    2019-02-02
  • 詳解關于Vue單元測試的幾個坑

    詳解關于Vue單元測試的幾個坑

    這篇文章主要介紹了關于Vue單元測試的幾個坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Vue AST源碼解析第一篇

    Vue AST源碼解析第一篇

    這篇文章主要為大家詳細介紹了Vue AST源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 在Nginx上部署前端Vue項目的詳細步驟(超級簡單!)

    在Nginx上部署前端Vue項目的詳細步驟(超級簡單!)

    這篇文章主要介紹了在Nginx上部署前端Vue項目的詳細步驟,Nginx是一款高效的HTTP和反向代理Web服務器,作為開源軟件,Nginx以其高性能、可擴展性和靈活性廣泛應用于Web架構中,文中將步驟介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • Vue3中如何使用異步請求示例詳解

    Vue3中如何使用異步請求示例詳解

    Vue3增加了很多讓人眼前一亮的特征,suspense 組件就是其中之一,對處理異步請求數(shù)據(jù)非常實用,下面這篇文章主要給大家介紹了關于Vue3中如何使用異步請求的相關資料,需要的朋友可以參考下
    2022-06-06

最新評論