Jadual Kandungan
 前面的话
静态props
命名约定
动态props
传递数字
props验证
单向数据流
修改prop数据
Rumah hujung hadapan web tutorial js Vue组件选项props

Vue组件选项props

Aug 19, 2017 am 10:32 AM
props komponen Pilihan

 前面的话

  组件接受的选项大部分与Vue实例一样,而选项props是组件中非常重要的一个选项。在 Vue 中,父子组件的关系可以总结为 props down, events up。父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息。本文将详细介绍Vue组件选项props

 

静态props

  组件实例的作用域是孤立的。这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据。要让子组件使用父组件的数据,需要通过子组件的 props 选项

  使用Prop传递数据包括静态和动态两种形式,下面先介绍静态props

  子组件要显式地用 props 选项声明它期待获得的数据

var childNode = {
  template: '<p>{{message}}</p>',
  props:['message']
}
Salin selepas log masuk

  静态Prop通过为子组件在父组件中的占位符添加特性的方式来达到传值的目的

<p id="example">
  <parent></parent></p>
Salin selepas log masuk

<script>var childNode = {
  template: '&lt;p&gt;{{message}}&lt;/p&gt;',
  props:['message']
}var parentNode = {
  template: `  <p class="parent">
    <child message="aaa"></child>
    <child message="bbb"></child>
  </p>`,  components: {    'child': childNode
  }
};// 创建根实例new Vue({
  el: '#example',
  components: {    'parent': parentNode
  }
})</script>
Salin selepas log masuk

 

命名约定

  对于props声明的属性来说,在父级HTML模板中,属性名需要使用中划线写法

var parentNode = {
  template: `  <p class="parent">
    <child my-message="aaa"></child>
    <child my-message="bbb"></child>
  </p>`,
  components: {
    'child': childNode
  }
};
Salin selepas log masuk

  子级props属性声明时,使用小驼峰或者中划线写法都可以;而子级模板使用从父级传来的变量时,需要使用对应的小驼峰写法

var childNode = {
  template: '<p>{{myMessage}}</p>',
  props:['myMessage']
}
Salin selepas log masuk
Salin selepas log masuk

var childNode = {
  template: '<p>{{myMessage}}</p>',
  props:['my-message']
}
Salin selepas log masuk

 

动态props

  在模板中,要动态地绑定父组件的数据到子模板的 props,与绑定到任何普通的HTML特性相类似,就是用 v-bind。每当父组件的数据变化时,该变化也会传导给子组件

var childNode = {
  template: '<p>{{myMessage}}</p>',
  props:['myMessage']
}
Salin selepas log masuk
Salin selepas log masuk

var parentNode = {
  template: `
  <p class="parent">
    <child :my-message="data1"></child>
    <child :my-message="data2"></child>
  </p>`,
  components: {
    'child': childNode
  },
  data(){
    return {
      'data1':'aaa',
      'data2':'bbb'
    }
  }
};
Salin selepas log masuk

  

传递数字

  初学者常犯的一个错误是使用字面量语法传递数值

<!-- 传递了一个字符串 "1" --><comp some-prop="1"></comp>
Salin selepas log masuk

<p id="example">
  <my-parent></my-parent></p>
Salin selepas log masuk

<script>var childNode = {
  template: '<p>{{myMessage}}的类型是{{type}}</p>',
  props:['myMessage'],
  computed:{
    type(){      return typeof this.myMessage
    }
  }
}var parentNode = {
  template: `  <p class="parent">
    <my-child my-message="1"></my-child>
  </p>`,  components: {    'myChild': childNode
  }
};// 创建根实例new Vue({
  el: '#example',
  components: {    'MyParent': parentNode
  }
})</script>
Salin selepas log masuk

  因为它是一个字面 prop,它的值是字符串 "1" 而不是 number。如果想传递一个实际的 number,需要使用 v-bind,从而让它的值被当作JS表达式计算 

<!-- 传递实际的 number --><comp v-bind:some-prop="1"></comp>
Salin selepas log masuk

var parentNode = {
  template: `  <p class="parent">
    <my-child :my-message="1"></my-child>
  </p>`,
  components: {
    'myChild': childNode
  }
};
Salin selepas log masuk

  或者可以使用动态props,在data属性中设置对应的数字1

var parentNode = {
  template: `  <p class="parent">
    <my-child :my-message="data"></my-child>
  </p>`,
  components: {
    'myChild': childNode
  },
  data(){
    return {
      'data': 1
    }
  }
};
Salin selepas log masuk

 

props验证

  可以为组件的 props 指定验证规格。如果传入的数据不符合规格,Vue会发出警告。当组件给其他人使用时,这很有用

  要指定验证规格,需要用对象的形式,而不能用字符串数组

Vue.component('example', {
  props: {
    // 基础类型检测 (`null` 意思是任何类型都可以)
    propA: Number,
    // 多种类型
    propB: [String, Number],
    // 必传且是字符串
    propC: {
      type: String,
      required: true
    },
    // 数字,有默认值
    propD: {
      type: Number,
      default: 100
    },
    // 数组/对象的默认值应当由一个工厂函数返回
    propE: {
      type: Object,
      default: function () {
        return { message: 'hello' }
      }
    },
    // 自定义验证函数
    propF: {
      validator: function (value) {
        return value > 10
      }
    }
  }
})
Salin selepas log masuk

  type 可以是下面原生构造器

String
Number
Boolean
Function
Object
Array
Symbol
Salin selepas log masuk

  type 也可以是一个自定义构造器函数,使用 instanceof 检测。

  当 prop 验证失败,Vue 会在抛出警告 (如果使用的是开发版本)。props会在组件实例创建之前进行校验,所以在 defaultvalidator 函数里,诸如 datacomputedmethods 等实例属性还无法使用

  下面是一个简单例子,如果传入子组件的message不是数字,则抛出警告

<p id="example">
  <parent></parent>
</p>
Salin selepas log masuk
Salin selepas log masuk

<script>
var childNode = {
  template: '<p>{{message}}</p>',
  props:{
    'message':Number
  }
}
var parentNode = {
  template: `
  <p class="parent">
    <child :message="msg"></child>
  </p>`,
  components: {
    'child': childNode
  },
  data(){
    return{
      msg: '123'
    }
  }
};
// 创建根实例
new Vue({
  el: '#example',
  components: {
    'parent': parentNode
  }
})
</script>
Salin selepas log masuk

  传入数字123时,则无警告提示。传入字符串'123'时,结果如下所示

  将上面代码中,子组件的内容修改如下,可自定义验证函数,当函数返回为false时,则输出警告提示

var childNode = {
  template: '<p>{{message}}</p>',
  props:{
    'message':{
      validator: function (value) {
        return value > 10
      }
    }
  }
}
Salin selepas log masuk

  在父组件中传入msg值为1,由于小于10,则输出警告提示

var parentNode = {
  template: `
  <p class="parent">
    <child :message="msg"></child>
  </p>`,
  components: {
    'child': childNode
  },
  data(){
    return{
      msg:1
    }
  }
};
Salin selepas log masuk

 

单向数据流

  prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解

  另外,每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着不应该在子组件内部改变 prop。如果这么做了,Vue 会在控制台给出警告

  下面是一个典型例子

<p id="example">
  <parent></parent>
</p>
Salin selepas log masuk
Salin selepas log masuk

<script>
var childNode = {
  template: `
  <p class="child">
    <p>
      <span>子组件数据</span>
      <input v-model="childMsg">
    </p>
    <p>{{childMsg}}</p>
  </p>
  `,
  props:['childMsg']
}
var parentNode = {
  template: `
  <p class="parent">
    <p>
      <span>父组件数据</span>
      <input v-model="msg">
    </p>
    <p>{{msg}}</p>
    <child :child-msg="msg"></child>
  </p>
  `,
  components: {
    'child': childNode
  },
  data(){
    return {
      'msg':'match'
    }
  }
};
// 创建根实例
new Vue({
  el: '#example',
  components: {
    'parent': parentNode
  }
})
</script>
Salin selepas log masuk

  父组件数据变化时,子组件数据会相应变化;而子组件数据变化时,父组件数据不变,并在控制台显示警告

  修改子组件数据时,打开浏览器控制台会出现下图所示警告提示

 

修改prop数据

  修改prop中的数据,通常有以下两种原因

  1、prop 作为初始值传入后,子组件想把它当作局部数据来用

  2、prop 作为初始值传入,由子组件处理成其它数据输出

  [注意]JS中对象和数组是引用类型,指向同一个内存空间,如果 prop 是一个对象或数组,在子组件内部改变它会影响父组件的状态

  对于这两种情况,正确的应对方式是

  1、定义一个局部变量,并用 prop 的值初始化它

props: ['initialCounter'],
data: function () {
  return { counter: this.initialCounter }
}
Salin selepas log masuk

  但是,定义的局部变量counter只能接受initialCounter的初始值,当父组件要传递的值发生变化时,counter无法接收到最新值

<p id="example">
  <parent></parent></p><script>var childNode = {
  template: `  <p class="child">
    <p>
      <span>子组件数据</span>
      <input v-model="temp">
    </p>
    <p>{{temp}}</p>
  </p>  `,
  props:['childMsg'],
  data(){    return{
      temp:this.childMsg
    }
  },
};var parentNode = {
  template: `  <p class="parent">
    <p>
      <span>父组件数据</span>
      <input v-model="msg">
    </p>
    <p>{{msg}}</p>
    <child :child-msg="msg"></child>
  </p>  `,
  components: {    'child': childNode
  },
  data(){    return {      'msg':'match'
    }
  }
};// 创建根实例new Vue({
  el: '#example',
  components: {    'parent': parentNode
  }
})</script>
Salin selepas log masuk

  下面示例中,除初始值外,父组件的值无法更新到子组件中

  2、定义一个计算属性,处理 prop 的值并返回

props: ['size'],
computed: {
  normalizedSize: function () {
    return this.size.trim().toLowerCase()
  }
}
Salin selepas log masuk

  但是,由于是计算属性,则只能显示值,而不能设置值

<script src="https://unpkg.com/vue"></script><script>var childNode = {
  template: `  <p class="child">
    <p>
      <span>子组件数据</span>
      <input v-model="temp">
    </p>
    <p>{{temp}}</p>
  </p>  `,
  props:['childMsg'],
  computed:{
      temp(){        return this.childMsg
      }
  },
};var parentNode = {
  template: `  <p class="parent">
    <p>
      <span>父组件数据</span>
      <input v-model="msg">
    </p>
    <p>{{msg}}</p>
    <child :child-msg="msg"></child>
  </p>  `,
  components: {    'child': childNode
  },
  data(){    return {      'msg':'match'
    }
  }
};// 创建根实例new Vue({
  el: '#example',
  components: {    'parent': parentNode
  }
})</script>
Salin selepas log masuk

  下面示例中,由于子组件使用的是计算属性,所以,子组件的数据无法手动修改

  3、更加妥帖的方案是,使用变量储存prop的初始值,并使用watch来观察prop的值的变化。发生变化时,更新变量的值

<p id="example">
  <parent></parent></p><script>var childNode = {
  template: `  <p class="child">
    <p>
      <span>子组件数据</span>
      <input v-model="temp">
    </p>
    <p>{{temp}}</p>
  </p>  `,
  props:['childMsg'],
  data(){    return{
      temp:this.childMsg
    }
  },
  watch:{
    childMsg(){      this.temp = this.childMsg
    }
  }
};var parentNode = {
  template: `  <p class="parent">
    <p>
      <span>父组件数据</span>
      <input v-model="msg">
    </p>
    <p>{{msg}}</p>
    <child :child-msg="msg"></child>
  </p>  `,
  components: {    'child': childNode
  },
  data(){    return {      'msg':'match'
    }
  }
};// 创建根实例new Vue({
  el: '#example',
  components: {    'parent': parentNode
  }
})</script>
Salin selepas log masuk

 

Atas ialah kandungan terperinci Vue组件选项props. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menetapkan fokus kamera lalai pada iPhone 15 Pro Bagaimana untuk menetapkan fokus kamera lalai pada iPhone 15 Pro Sep 22, 2023 pm 11:53 PM

Pada model iPhone 15 Pro, Apple telah memperkenalkan tiga pilihan jarak fokus untuk merakam dengan kamera utama. Artikel ini menerangkan pilihan ini dan cara menetapkan jarak fokus lalai pilihan anda untuk mengambil foto. Untuk memanfaatkan sepenuhnya sistem kamera yang dipertingkatkan pada iPhone 15 Pro dan iPhone 15 Pro Max, Apple telah menambah tiga pilihan jarak fokus berbeza pada zum optik kamera utama. Sebagai tambahan kepada mod lalai 1x (24mm), Apple telah menambah tetapan 1.2x (28mm) dan 1.5x (35mm). Pengguna iPhone 15 Pro boleh memilih daripada jarak fokus ini apabila mengambil foto dengan hanya mengetik butang 1x dalam apl Kamera. Walau bagaimanapun, disebabkan oleh sebab teknikal, tumpuan ini

Pilihan tempat liputan peribadi tidak ditemui pada iPhone [Tetap] Pilihan tempat liputan peribadi tidak ditemui pada iPhone [Tetap] Jul 15, 2023 pm 08:45 PM

Apabila tiada isyarat Wi-Fi di sekeliling kita, apa yang kita fikirkan ialah hotspot peribadi pada iPhone kita, bukan? Baru-baru ini, ramai pengguna iPhone telah mengulas bahawa mereka tidak dapat mencari pilihan hotspot peribadi pada iPhone mereka dan oleh itu, ini menimbulkan masalah besar untuk mereka semua. Sebab utama yang boleh menyebabkan isu khusus ini pada iPhone anda mungkin termasuk salah satu sebab berikut. Pepijat perisian kecil dalam iPhone. Perisian iOS pada iPhone anda tidak dikemas kini kepada versi terkini. Perubahan telah dibuat pada tetapan rangkaian pada iPhone. Jangan kemas kini tetapan pembawa (jika ada). Terdapat masalah dengan isyarat rangkaian mudah alih pada iPhone. Selepas menangani faktor-faktor ini kami mendapati penyelesaian mudah untuk masalah ini dan digunakan

Cara memasang komponen versi lama Windows 10 DirectPlay Cara memasang komponen versi lama Windows 10 DirectPlay Dec 28, 2023 pm 03:43 PM

Ramai pengguna sentiasa menghadapi beberapa masalah apabila bermain beberapa permainan di win10, seperti skrin membeku dan skrin kabur Pada masa ini, kami boleh menyelesaikan masalah dengan menghidupkan fungsi directplay, dan kaedah operasi fungsi itu juga Sangat mudah. Cara memasang directplay, komponen lama win10 1. Masukkan "Panel Kawalan" dalam kotak carian dan bukanya 2. Pilih ikon besar sebagai kaedah tontonan 3. Cari "Program dan Ciri" 4. Klik di sebelah kiri untuk membolehkan atau matikan fungsi menang 5. Pilih versi lama di sini Hanya tandakan kotak

Betulkan: Pilihan dok dalam bar tugas dikelabukan pada Windows 11 Betulkan: Pilihan dok dalam bar tugas dikelabukan pada Windows 11 Sep 15, 2023 pm 05:35 PM

Bar bahasa ialah ciri penting dalam Windows yang membolehkan pengguna menukar input dengan cepat dan bukannya menggunakan pintasan papan kekunci +. Tetapi dalam beberapa kes, pilihan dok dalam bar tugas kelihatan kelabu dalam Windows 11. Masalah dengan WindowsSpacebar ini nampaknya sangat biasa dan tiada penyelesaian. Kami cuba menukar tetapan bahasa dan mengkonfigurasi semula kandungan, tetapi tidak berjaya. Walaupun akhirnya kami berjaya mencari punca dan penyelesaiannya. Mengapa saya tidak boleh dok bar bahasa dalam bar tugas dalam Windows 11? Anda hanya memasang satu bahasa dan bar bahasa hanya berfungsi dengan berbilang bahasa. Bahasa tidak dipasang dengan betul. Pepijat dalam Windows 11. Fail sistem atau profil pengguna yang rosak. Jika di W

Bagaimana untuk menyemak negara model iPhone Bagaimana untuk menyemak negara model iPhone Jul 09, 2023 pm 11:33 PM

Tahukah anda bahawa Apple menyumber luar bahagian tertentu produknya ke negara yang berbeza? ya. Mereka secara khusus bertujuan untuk dijual di negara-negara ini dan oleh itu dihasilkan di sana. Anda mungkin telah membeli iPhone/iPad terpakai daripada orang lain dan mungkin tertanya-tanya sama ada mungkin untuk mengetahui dari negara mana iPhone anda berasal. Ya, ada cara untuk mengetahuinya, dan kami akan bercakap lebih lanjut mengenainya sekarang dalam artikel ini. Dalam artikel ini, anda akan mendapat penjelasan tentang cara mengetahui negara asal iPhone anda menggunakan langkah mudah. Cara Mengetahui Negara Asal iPhone Langkah 1: Pertama, anda harus mengetik pada ikon Tetapan dari skrin utama. Langkah 2: Ini adalah untuk membuka aplikasi Tetapan, setelah dibuka, klik padanya untuk pergi ke pilihan Umum seperti yang ditunjukkan di bawah.

Cara menggunakan petikan blok dalam Apple Notes Cara menggunakan petikan blok dalam Apple Notes Oct 12, 2023 pm 11:49 PM

Dalam iOS 17 dan macOS Sonoma, Apple telah menambah pilihan pemformatan baharu untuk Apple Notes, termasuk petikan blok dan gaya Monostyle baharu. Inilah cara untuk menggunakannya. Dengan pilihan pemformatan tambahan dalam Apple Notes, anda kini boleh menambah petikan blok pada nota anda. Format petikan blok memudahkan untuk mengimbangi bahagian penulisan secara visual menggunakan bar petikan di sebelah kiri teks. Hanya ketik/klik butang format "Aa" dan pilih pilihan petikan blok sebelum menaip atau apabila anda berada di baris yang anda ingin tukar kepada petikan blok. Pilihan ini digunakan pada semua jenis teks, pilihan gaya dan senarai, termasuk senarai semak. Dalam menu Format yang sama anda boleh mencari pilihan Gaya Tunggal baharu. Ini ialah semakan bagi "lebar sama" sebelumnya

Cara Lalai 'Tunjukkan Lebih Banyak Pilihan' dalam Menu Klik Kanan Windows 11 Cara Lalai 'Tunjukkan Lebih Banyak Pilihan' dalam Menu Klik Kanan Windows 11 Jul 10, 2023 pm 12:33 PM

Salah satu perubahan yang paling menjengkelkan yang kami pengguna tidak pernah mahu ialah kemasukan "Tunjukkan lebih banyak pilihan" dalam menu konteks klik kanan. Walau bagaimanapun, anda boleh mengalih keluarnya dan mendapatkan kembali menu konteks klasik dalam Windows 11. Tiada lagi berbilang klik dan mencari pintasan ZIP ini dalam menu konteks. Ikuti panduan ini untuk kembali ke menu konteks klik kanan penuh pada Windows 11. Betulkan 1 – Laraskan CLSID secara manual Ini adalah satu-satunya kaedah manual dalam senarai kami. Anda akan melaraskan kunci atau nilai tertentu dalam Editor Pendaftaran untuk menyelesaikan isu ini. Nota – Suntingan pendaftaran seperti ini sangat selamat dan akan berfungsi tanpa sebarang masalah. Oleh itu, anda harus membuat sandaran pendaftaran sebelum mencuba ini pada sistem anda. Langkah 1 – Cubalah

Cara menangani kotak semak dan radiobutton dalam bentuk PHP Cara menangani kotak semak dan radiobutton dalam bentuk PHP Aug 11, 2023 am 08:39 AM

Cara mengendalikan kotak semak dan butang radio dalam bentuk PHP Dalam pembangunan web, borang adalah salah satu cara utama interaksi data antara aplikasi dan pengguna. Dalam borang, kadangkala kita perlu menggunakan kotak semak dan butang radio untuk memilih pilihan. Artikel ini akan menerangkan cara mengendalikan kotak pilihan dan butang radio dalam PHP. 1. Pemprosesan kotak semak Dalam HTML, kita boleh menggunakan &lt;inputtype="checkbox&qu

See all articles