Berhijrah dari Vue 1.x


Daftar Kandungan

  • Soalan Lazim

  • Templat

  • Fungsi cangkuk kitaran hayat

    • sebelumMenyusun .

      sedia
    • v-untuk

    • v-untuk susunan Parameter semasa melintasi tatasusunan

    • v-untuk susunan Parameter apabila melintasi objek

    • $index dan $key

    • v-untuk nilai julat
    • Props

    • paksa Parameter Prop

  • v-bind's .once and .sync simbol pengubahsuaian

    • Ubah suai Props

    • Props of root instance

    • harta benda : palsu

    • Arahan terbina Dalam .
    • Gunakan parameter malas atau nombor v-model dengan v-untuk Nilai Primitif Berulang

  • v-model dengan v-untuk Nilai Primitif Berulang
    • v-bind:style with !important
    • dan v-ref
  • Gunakan v-else selepas v-show

  • perintah tersuai

    Peralihan
  • Parameter peralihan
    • Vue.transition boleh diguna semula
    • Parameter stagger peralihan
  • Pilihan acara

  • Penapis dwiarah

    • Slot
    • Slot dua arah
    • Parameter gaya slot
  • Atribut istimewa
    • sifat kekal-hidup
    • Kira interpolasi

  • Pengiraan interpolasi
  • Ikatan pengiraan HTML
    • ikatan tunggal
  • respon
    • vm.$tonton
    • vm.$set
    • delete

    • Array.prototype.$set
  • Array.prototype.$remove

  • Kaedah contoh di sekitar DOM

  • Vue.config.debug

  • Vue.lanjutkan dengan el

    • Soalan Lazim

    • Wah, halaman yang sangat panjang! Adakah ini bermakna Vue 2.0 berbeza sama sekali. Adakah anda perlu mempelajarinya dari awal Adakah mustahil untuk memindahkan projek Vue 1.0?

    • Saya sangat gembira untuk memberitahu anda bahawa ia tidak! Hampir 90% daripada API dan konsep teras kekal tidak berubah. Bahagian ini agak panjang kerana mengandungi banyak huraian dan banyak contoh migrasi. Jangan risau,
    • anda tidak perlu membaca bahagian ini dari awal hingga akhir!

      Di manakah saya harus memulakan penghijrahan projek?
  •  1. Mula-mula, jalankan
  • alat migrasi

    di bawah projek semasa. Kami telah berhati-hati untuk memudahkan proses naik taraf Vue lanjutan kepada menggunakan alat baris arahan yang ringkas. Apabila alat mengenal pasti ciri lama, alat itu memberitahu anda dan membuat pengesyoran, bersama-sama dengan pautan ke maklumat lanjut.

     2. Kemudian, semak imbas kandungan yang disenaraikan di bar sisi halaman ini. Jika anda mendapati bahawa beberapa tajuk mempunyai kesan pada projek anda, tetapi alat migrasi tidak memberikan gesaan, sila semak projek anda.

     3. Jika projek anda mempunyai kod ujian, jalankan ia dan lihat di mana ia masih gagal. Jika anda tidak mempunyai kod ujian, buka aplikasi anda dalam penyemak imbas, navigasi dan perhatikan sebarang ralat atau amaran.

     4. Permohonan anda kini sepatutnya dipindahkan sepenuhnya. Jika anda tidak sabar-sabar untuk mengetahui lebih lanjut, anda boleh membaca seluruh halaman ini - atau mulakan dari awal di bahagian Pengenalan dan selami dokumentasi baharu serta panduan yang dipertingkatkan. Banyak bahagian telah ditinggalkan kerana anda sudah biasa dengan beberapa konsep teras.

    Berapa lamakah masa yang diambil untuk memindahkan aplikasi versi Vue 1.x kepada 2.0?

    Ini bergantung kepada beberapa faktor:

    • Bergantung pada saiz aplikasi anda (yang bersaiz kecil dan sederhana pada asasnya boleh dilakukan dalam satu hari).

    • Bergantung pada berapa kali anda terganggu dan memulakan ciri baharu yang paling hebat dalam 2.0. Tidak dapat menentukan masa, ini sering berlaku apabila kami membina aplikasi 2.0!

    • Bergantung pada ciri lama yang anda gunakan. Kebanyakan boleh ditingkatkan melalui cari dan ganti, tetapi sesetengahnya mungkin mengambil sedikit masa. Jika anda tidak mengikuti amalan terbaik, Vue 2.0 akan mencuba sedaya upaya untuk memaksa anda mengikutinya. Ini bagus untuk operasi jangka panjang projek, tetapi ia juga mungkin bermakna pemfaktoran semula yang ketara (walaupun beberapa bahagian yang perlu difaktorkan semula mungkin sudah usang).

    Jika saya menaik taraf kepada Vue 2 , adakah saya juga perlu menaik taraf Vuex dan Vue Router pada masa yang sama?

    Hanya Penghala Vue 2 yang serasi dengan Vue 2, jadi Penghala Vue perlu dinaik taraf, dan anda mesti mengikut kaedah migrasi Penghala Vue untuk mengendalikannya. Nasib baik, kebanyakan aplikasi tidak mempunyai banyak kod berkaitan penghala, jadi pemindahan mungkin tidak akan mengambil masa lebih daripada sejam.

    Untuk Vuex, versi 0.8+ kekal serasi dengan Vue 2, jadi sesetengahnya tidak perlu dipaksa untuk menaik taraf. Satu-satunya sebab untuk menaik taraf sekarang ialah jika anda ingin memanfaatkan ciri lanjutan baharu dalam Vuex 2, seperti modul dan plat dandang yang dikurangkan. . Contoh serpihan tidak lagi dibenarkan, jika anda mempunyai templat seperti ini:

    <p>foo</p>
    <p>bar</p>

    Lebih baik bungkus keseluruhan kandungan menjadi elemen baharu seperti ini:

    <div>
      <p>foo</p>
      <p>bar</p>
    </div>

    Cara untuk menaik taraf

    Jalankan suite ujian hujung ke hujung selepas naik taraf atau jalankan aplikasi dan semak amaran konsol untuk mengetahui templat yang terdapat berbilang elemen akar.


    Fungsi cangkuk kitaran hayat



    beforeCompile 移除

    使用 created 钩子函数替代。

    升级方式

    在代码库中运行迁移工具来找出所有使用此钩子函数的示例。


    compiled 替换

    使用 mounted 钩子函数替代。

    升级方式

    在代码库中运行迁移工具来找出所有使用此钩子函数的示例。


    attached 移除

    使用其他钩子函数内置的 DOM 检测 (DOM check) 方法。例如,替换如下:

    attached: function () {
      doSomething()
    }

    可以这样使用:

    mounted: function () {
      this.$nextTick(function () {
        doSomething()
      })
    }

    升级方式

    在代码库中运行迁移工具来找出所有使用此钩子函数的示例。


    detachedbeforeCompile

    Gunakan dicipta penggantian fungsi cangkuk.

    Cara untuk menaik taraf

    🎜🎜Jalankan 🎜Migration Tool🎜 dalam pangkalan kod untuk mencari semua contoh menggunakan fungsi cangkuk ini. 🎜🎜🎜🎜🎜

    🎜🎜compiled🎜🎜🎜🎜 🎜Ganti 🎜🎜🎜🎜🎜sebaliknya, gunakan fungsi > 🎜🎜🎜🎜🎜Cara untuk menaik taraf🎜🎜🎜🎜Jalankan 🎜Migration Tool🎜 dalam pangkalan kod untuk mencari semua contoh menggunakan fungsi cangkuk ini. 🎜🎜🎜🎜🎜

    🎜🎜dipasang🎜🎜🎜🎜 🎜Alih keluar🎜🎜🎜🎜🎜Gunakan kaedah cangkuk terbina dalam yang lain. Sebagai contoh, gantikan yang berikut: 🎜

    detached: function () {
      doSomething()
    }
    🎜 boleh digunakan seperti ini: 🎜
    destroyed: function () {
      this.$nextTick(function () {
        doSomething()
      })
    }
    🎜🎜🎜🎜Tingkatkan cara🎜🎜🎜🎜 Jalankan 🎜Migration Tool🎜 dalam pangkalan kod untuk mencari semua contoh menggunakan fungsi cangkuk ini. 🎜🎜🎜🎜🎜

    🎜🎜tertanggal🎜🎜🎜🎜 🎜Alih keluar🎜🎜🎜🎜🎜Gunakan kaedah semakan fungsi DOM yang lain Sebagai contoh, gantikan yang berikut: 🎜

    mounted: function () {
      this.$nextTick(function () {
        // 代码保证 this.$el 在 document 中
      })
    }
    🎜 boleh digunakan seperti ini: 🎜
    <div v-for="item in items" track-by="id">
    🎜🎜🎜🎜Tingkatkan cara🎜🎜🎜🎜 Jalankan 🎜Migration Tool🎜 dalam pangkalan kod untuk mencari semua contoh menggunakan fungsi cangkuk ini. 🎜🎜


    init< strong> Namakan semulainit 重新命名

    使用新的 beforeCreate 钩子函数替代,本质上 beforeCreate 和 init 完全相同。init 被重新命名是为了和其他的生命周期方法的命名方式保持一致。

    升级方式

    在代码库中运行迁移工具来找出所有使用此钩子函数的示例。


    ready 替换

    使用新的 mounted 钩子函数替代。应该注意的是,使用 mounted 并不能保证钩子函数中的 this.$el 在 document 中。为此还应该引入 Vue.nextTick/vm.$nextTick。例如:

    <div v-for="item in items" v-bind:key="item.id">

    升级方式

    在代码库中运行迁移工具来找出所有使用此钩子函数的示例。


    v-for



    v-for 遍历数组时的参数顺序 变更

    当包含 index 时,之前遍历数组时的参数顺序是 (index, value)。现在是 (value, index) ,来和 JavaScript 的原生数组方法 (例如 forEachmap) 保持一致。

    升级方式

    在代码库中运行迁移工具来找出那些使用旧有参数顺序的示例。注意,如果你将你的 index 参数命名为一些不通用的名字 (例如 position 或 num

    Gunakan fungsi cangkuk beforeCreate baharu, pada asasnya beforeCreate dan init adalah sama. init telah dinamakan semula untuk selaras dengan penamaan kaedah kitaran hayat yang lain.
    🎜 Kaedah naik taraf🎜🎜Jalankan alat migrasi dalam pangkalan kod untuk mencari semua contoh menggunakan fungsi cangkuk ini. 🎜🎜🎜🎜🎜

    sedia Penggantian🎜🎜Gunakan fungsi cangkuk mounted baharu. Perlu diingat bahawa menggunakan mounted tidak menjamin bahawa ini.$el dalam fungsi cangkuk berada dalam dokumen. Vue.nextTick/vm.$nextTick juga harus diperkenalkan untuk tujuan ini. Contohnya: 🎜

    props: {
      username: {
        type: String,
        coerce: function (value) {
          return value
            .toLowerCase()
            .replace(/\s+/, '-')
        }
      }
    }
    🎜 Kaedah naik taraf🎜🎜Jalankan alat migrasi< dalam asas kod /a> untuk mencari semua contoh menggunakan fungsi cangkuk ini. 🎜🎜🎜🎜🎜

    v-for< /h2>
    🎜🎜🎜

    v-for Susunan parameter diubah apabila merentasi tatasusunan🎜🎜🎜Apabila mengandungi indeks , susunan parameter semasa melintasi tatasusunan ialah (index, value). Ini kini (nilai, indeks), agar selaras dengan kaedah tatasusunan asli JavaScript (seperti forEach dan map). 🎜

    🎜 Kaedah naik taraf🎜🎜Jalankan alat migrasi dalam pangkalan kod untuk mencari contoh yang menggunakan susunan hujah lama. Ambil perhatian bahawa jika anda menamakan parameter indeks anda sesuatu yang luar biasa (seperti position atau num), alat migrasi tidak akan menandainya keluar. 🎜🎜


    v-forTertib parameter semasa melintasi objekTukarv-for 遍历对象时的参数顺序 变更

    当包含 property 名称/key 时,之前遍历对象的参数顺序是 (name, value)。现在是 (value, name),来和常见的对象迭代器 (例如 lodash) 保持一致。

    升级方式

    在代码库中运行迁移工具来找出那些使用旧有参数顺序的示例。注意,如果你将你的 key 参数命名为一些不通用的名字 (例如 name 或 property),迁移工具将不会把它们标记出来。


    $index and $key 移除

    已经移除了 $index$key 这两个隐式声明变量,以便在 v-for 中显式定义。这可以使没有太多 Vue 开发经验的开发者更好地阅读代码,并且在处理嵌套循环时也能产生更清晰的行为。

    升级方式

    在代码库中运行迁移工具来找出使用这些移除变量的示例。如果你没有找到,也可以在控制台错误中查找 (例如 Uncaught ReferenceError: $index is not defined)。


    track-by 替换

    track-by 已经替换为 key,它的工作方式与其他属性一样,没有 v-bind 或者 : 前缀,它会被作为一个字符串处理。多数情况下,你需要使用具有完整表达式的动态绑定 (dynamic binding) 来替换静态的 key。例如,替换:

    props: {
      username: String,
    },
    computed: {
      normalizedUsername: function () {
        return this.username
          .toLowerCase()
          .replace(/\s+/, '-')
      }
    }

    你现在应该写为:

    template: '<p>message: {{ timeMessage }}</p>',
    computed: {
      timeMessage: {
        cache: false,
        get: function () {
          return Date.now() + this.message
        }
      }
    }

    升级方式

    在代码库中运行迁移工具来找出那些使用track-by

    Apabila nama/kunci sifat disertakan, susunan parameter sebelumnya untuk melintasi objek ialah ( nama, nilai ). Kini (nilai, nama), agar selaras dengan lelaran objek biasa (cth. lodash).
    🎜 Kaedah naik taraf🎜🎜Jalankan alat migrasi dalam pangkalan kod untuk mencari contoh yang menggunakan susunan hujah lama. Harap maklum bahawa jika anda menamakan parameter utama anda sesuatu yang luar biasa (seperti nama atau property), alat migrasi tidak akan menandakannya. 🎜🎜🎜🎜🎜

    $index dan $key Remove🎜🎜telah mengalih keluar $index dan $key adalah pembolehubah yang diisytiharkan secara tersirat untuk definisi eksplisit dalam v-for. Ini membolehkan pembangun tanpa banyak pengalaman pembangunan Vue untuk membaca kod dengan lebih baik dan juga menghasilkan tingkah laku yang lebih bersih apabila berurusan dengan gelung bersarang. 🎜

    🎜 Kaedah naik taraf🎜🎜Jalankan alat migrasi dalam pangkalan kod untuk mencari contoh penggunaan pembolehubah yang dialih keluar ini. Jika anda tidak menjumpainya, anda juga boleh mencarinya dalam Ralat konsol (contohnya, Uncaught ReferenceError: $index is not definition). 🎜🎜🎜🎜🎜

    track-by< span style="font-size: 18px;"> penggantian🎜🎜track-by telah digantikan dengan kunci , ia berfungsi seperti sifat lain, tanpa awalan v-bind atau :, ia akan dianggap sebagai rentetan. Dalam kebanyakan kes, anda perlu menggantikan kekunci statik dengan pengikatan dinamik dengan ungkapan penuh. Contohnya, untuk menggantikan: 🎜

    template: '<p>message: {{ getTimeMessage() }}</p>',
    methods: {
      getTimeMessage: function () {
        return Date.now() + this.message
      }
    }
    🎜 anda kini perlu menulis: 🎜
    <my-component v-on:click.native="doSomething"></my-component>
    🎜< span style="font-size: 16px;">Kaedah naik taraf🎜🎜Jalankan dalam pangkalan kod Alat Migrasi untuk mencari contoh yang menggunakan track-by. 🎜🎜


    v-for Nilai julat tukarv-for 范围值 变更

    之前,v-for="number in 10"number 从 0 开始到 9 结束,现在从 1 开始,到 10 结束。

    升级方式

    在代码库中使用正则 /w+ in d+/搜索。当出现在 v-for 中,请检查是否受到影响。


    Props



    coerce Prop 的参数 移除

    如果需要检查 prop 的值,创建一个内部的 computed 值,而不再在 props 内部去定义,例如:

    <!--
    通过使用 lodash 或者其它库的 debounce 函数,
    我们相信 debounce 实现是一流的,
    并且可以随处使用它,不仅仅是在模板中。
    -->
    <script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.js"></script>
    <div id="debounce-search-demo">
      <input v-model="searchQuery" placeholder="Type something">
      <strong>{{ searchIndicator }}</strong>
    </div>

    现在应该写为:

    new Vue({
      el: '#debounce-search-demo',
      data: {
        searchQuery: '',
        searchQueryIsDirty: false,
        isCalculating: false
      },
      computed: {
        searchIndicator: function () {
          if (this.isCalculating) {
            return '⟳ Fetching new results'
          } else if (this.searchQueryIsDirty) {
            return '... Typing'
          } else {
            return '✓ Done'
          }
        }
      },
      watch: {
        searchQuery: function () {
          this.searchQueryIsDirty = true
          this.expensiveOperation()
        }
      },
      methods: {
        // 这是 debounce 实现的地方。
        expensiveOperation: _.debounce(function () {
          this.isCalculating = true
          setTimeout(function () {
            this.isCalculating = false
            this.searchQueryIsDirty = false
          }.bind(this), 1000)
        }, 500)
      }
    })

    这样有一些好处:

    • 你可以对保持原始 prop 值的操作权限。

    • 通过给予验证后的值一个不同的命名,强制开发者使用显式申明。

    升级方式

    运行迁移工具找出包含 coerce 选项的实例。


    twoWay Prop 的参数 移除

    Props 现在只能单向传递。为了对父组件产生反向影响,子组件需要显式地传递一个事件而不是依赖于隐式地双向绑定。详见:

    升级方式

    运行迁移工具,找出含有 twoWay

    sebelum ini, nombor v-for="number in 10" > Ia bermula pada 0 dan berakhir pada 9, kini ia bermula pada 1 dan berakhir pada 10.
    🎜 Kaedah naik taraf🎜🎜Gunakan /w+ biasa dalam carian d+/ dalam pangkalan kod. Apabila terdapat dalam v-for , sila semak untuk melihat sama ada ia terjejas. 🎜🎜🎜🎜🎜

    Props


    🎜🎜🎜< p id="coerce-prop">paksaan Parameter prop alih keluar🎜🎜Jika anda perlu menyemak nilai prop, buat nilai pengiraan dalaman dan bukannya masuk ke dalam Definisi prop, untuk contoh: 🎜
    <input v-model="name" lazy>
    <input v-model="age" type="number" number>
    🎜 kini harus ditulis sebagai: 🎜
    <input v-model.lazy="name">
    <input v-model.number="age" type="number">
    🎜Ini mempunyai beberapa kelebihan: 🎜
    • 🎜Anda boleh mengekalkan kebenaran operasi nilai prop asal . 🎜
    • 🎜Paksa pembangun menggunakan pengisytiharan eksplisit dengan memberikan nilai yang disahkan nama yang berbeza. 🎜
    🎜Kaedah naik taraf🎜🎜Jalankan migrasi alat Cari contoh yang mengandungi pilihan paksaan. 🎜🎜🎜🎜🎜

    twoWay Parameter prop dialih keluar🎜🎜Prop kini hanya boleh dihantar ke satu arah. Untuk mempunyai kesan terbalik pada komponen induk, komponen anak perlu secara eksplisit melepasi peristiwa dan bukannya bergantung pada pengikatan dua hala tersirat. Untuk butiran, lihat: 🎜

    🎜 Kaedah naik taraf🎜🎜Jalankan alat migrasi, Cari kejadian yang mengandungi parameter twoWay. 🎜🎜


    v-bindPengubah suai .sekali dan .sync dialih keluarv-bind.once.sync 修饰符 移除

    Props 现在只能单向传递。为了对父组件产生反向影响,子组件需要显式地传递一个事件而不是依赖于隐式地双向绑定。详见:

    升级方式

    运行迁移工具找到使用 .once 和 .sync 修饰符的实例。


    修改 Props 弃用

    组件内修改 prop 是反模式 (不推荐的) 的。比如,先声明一个 prop ,然后在组件中通过 this.myProp = 'someOtherValue' 改变 prop 的值。根据渲染机制,当父组件重新渲染时,子组件的内部 prop 值也将被覆盖。

    大多数情况下,改变 prop 值可以用以下选项替代:

    • 通过 data 属性,用 prop 去设置一个 data 属性的默认值。

    • 通过 computed 属性。

    升级方式

    运行端对端测试,查看关于 prop 修改的控制台警告信息


    根实例的 Props 替换

    对于一个根实例来说 (比如:用 new Vue({ ... }) 创建的实例),只能用 propsData 而不是 props

    升级方式

    运行端对端测试,将会弹出 failed tests 来通知你使用 props

    Prop kini hanya boleh digunakan secara individu lulus ke. Untuk mempunyai kesan terbalik pada komponen induk, komponen anak perlu secara eksplisit melepasi peristiwa dan bukannya bergantung pada pengikatan dua hala tersirat. Untuk butiran, lihat:
    🎜 Kaedah naik taraf🎜🎜Jalankan Alat migrasi ke cari Kejadian menggunakan pengubah suai .sekali dan .sync. 🎜🎜🎜🎜🎜

    Ubah suai Props Ditamatkan 🎜 🎜Mengubah suai prop dalam komponen adalah anti-corak (tidak disyorkan). Contohnya, isytiharkan prop dahulu, dan kemudian tukar nilai prop dalam komponen melalui this.myProp = 'someOtherValue'. Menurut mekanisme pemaparan, apabila komponen induk dipaparkan semula, nilai prop dalaman komponen anak juga akan ditimpa. 🎜🎜Dalam kebanyakan kes, menukar nilai prop boleh digantikan dengan pilihan berikut: 🎜

    • 🎜Melalui atribut data, gunakan prop untuk menetapkan nilai lalai daripada atribut data. 🎜
    • 🎜Melalui atribut yang dikira. 🎜
    🎜Kaedah naik taraf🎜🎜Jalankan ujian hujung ke hujung dan semak maklumat amaran konsol tentang pengubahsuaian prop. 🎜🎜🎜🎜🎜

    Props untuk contoh akar penggantian🎜🎜Untuk contoh akar (contohnya: tika dibuat dengan Vue({ ... }) baharu), anda hanya boleh menggunakan propsData dan bukannya props . 🎜

    🎜 Kaedah naik taraf🎜🎜Jalankan ujian hujung ke hujung, ujian yang gagal akan muncul untuk memberitahu anda bahawa tika akar menggunakan props telah tamat tempoh . 🎜🎜. : 18px;">

    Ditamatkan

    Dalam versi utama Vue yang akan datang, pengesahan cache bagi sifat yang dikira akan dialih keluar. Menukar sifat dikira yang tidak dicache kepada kaedah menghasilkan keputusan yang sama seperti sebelumnya. Contoh:

    <input v-model="text" value="foo">

    Atau gunakan kaedah komponen:

    data: {
      text: 'bar'
    }

    cache: false 弃用

    在 Vue 未来的大版本中,计算属性的缓存验证将会被移除。把不缓存的计算属性转换为方法可以得到和之前相同的结果。

    示例:

    <textarea v-model="text">
      hello world
    </textarea>

    或者使用组件方法:

    <input v-for="str in strings" v-model="str">

    升级方式

    运行迁移工具找到 cache: false 的选项。


    Built-In 指令



    v-bind 真/假值 变更

    在2.0中使用 v-bind 时,只有 null, undefined,和 false 被看作是假。这意味着,0 和空字符串将被作为真值渲染。比如 v-bind:draggable="''" 将被渲染为 draggable="true"

    对于枚举属性,除了以上假值之外,字符串 "false" 也会被渲染为 attr="false"

    注意,对于其它钩子函数 (如 v-if 和 v-show),他们依然遵循 js 对真假值判断的一般规则。

    升级方式

    运行端到端测试,如果你 app 的任何部分有可能被这个升级影响到,将会弹出failed tests


    v-on 监听原生事件 变更

    现在在组件上使用 v-on 只会监听自定义事件 (组件用 $emit 触发的事件)。如果要监听根元素的原生事件,可以使用 .nativeKaedah naik taraf

    Jalankan alat migrasi>Cari pilihan untuk

    Arahan Terbina Dalam🎜🎜🎜🎜🎜🎜🎜

    🎜v-bind🎜🎜🎜 nilai benar/salah ubah🎜🎜🎜🎜🎜 dalam Apabila menggunakan v-bind dalam 2.0, hanya null, undefined dan false dianggap palsu. Ini bermakna 0 dan rentetan kosong akan dipaparkan sebagai nilai sebenar. Contohnya, v-bind:draggable="''" akan dipaparkan sebagai draggable="true". 🎜🎜Untuk sifat penghitungan, sebagai tambahan kepada nilai palsu di atas, rentetan "false" juga akan dipaparkan sebagai attr="false". 🎜

    🎜Perhatikan bahawa untuk fungsi cangkuk lain (seperti v-if dan v-show), mereka masih mengikut peraturan am js untuk menilai benar dan salah nilai. 🎜
    🎜🎜🎜🎜Kaedah naik taraf🎜🎜🎜🎜Jalankan ujian hujung ke hujung Jika mana-mana bahagian apl anda mungkin terjejas oleh peningkatan ini, ujian yang gagal akan muncul " monitor-primary-event">🎜Gunakan v-on untuk memantau acara asli Tukar🎜🎜🎜🎜Sekarang dalam komponen Menggunakan v-on hanya akan mendengar acara tersuai (peristiwa yang dicetuskan oleh komponen menggunakan $emit). Jika anda ingin mendengar peristiwa asli unsur akar, anda boleh menggunakan pengubah suai .native, seperti: 🎜
    strings.map(function (str) {
      return createElement('input', ...)
    })
    🎜🎜🎜🎜Kaedah naik taraf🎜🎜🎜🎜Jalankan 🎜alat migrasi🎜 dalam pangkalan kod untuk mengetahui semua Contoh penggunaan fungsi cangkuk ini. 🎜🎜


    v-modelAlih keluar dengan debounce debouncev-model移除

    Debouncing 曾经被用来控制 Ajax 请求及其它高耗任务的频率。Vue 中v-modeldebounce 属性参数使得在一些简单情况下非常容易实现这种控制。但实际上,这是控制了状态更新的频率,而不是控制高耗时任务本身。这是个微小的差别,但是会随着应用增长而显现出局限性。

    例如在设计一个搜索提示时的局限性:

    1.gif

    使用 debounce 参数,便无法观察 “Typing” 的状态。因为无法对输入状态进行实时检测。然而,通过将 debounce 与 Vue 解耦,可以仅仅只延迟我们想要控制的操作,从而避开这些局限性:

    <input v-for="obj in objects" v-model="obj.str">
    <p v-bind:style="{ color: myColor + ' !important' }">hello</p>

    这种方式的另外一个优点是:当包裹函数执行时间与延时时间相当时,将会等待较长时间。比如,当给出搜索建议时,要等待用户输入停止一段时间后才给出建议,这个体验非常差。其实,这时候更适合用 throttling 函数。因为现在你可以自由的使用类似 lodash 之类的库,所以很快就可以用 throttling 重构项目。

    Upgrade Path

    运行迁移工具使用 debounce 参数的 实例。


    使用 lazy 或者 number 参数的 v-model替换

    lazynumber

    Depanunan pernah digunakan untuk mengawal permintaan Ajax dan lain-lain Kekerapan menuntut tugasan. Parameter atribut debounce v-model dalam Vue menjadikannya sangat mudah untuk mencapai kawalan ini dalam beberapa kes mudah. Tetapi sebenarnya, ini adalah untuk mengawal kekerapan
    kemas kini status

    , dan bukannya mengawal tugas yang memakan masa itu sendiri. Ini adalah perbezaan kecil, tetapi akan menjadi terhad apabila aplikasi anda berkembang. Contoh had semasa mereka bentuk gesaan carian:

    Menggunakan parameter debounce, anda tidak boleh melihat status "Menaip". Kerana status input tidak dapat dikesan dalam masa nyata. Walau bagaimanapun, dengan menyahganding debounce daripada Vue, kami hanya boleh menangguhkan operasi yang ingin kami kawal, justeru mengelakkan pengehadan ini:

    <p v-bind:style="'color: ' + myColor + ' !important'">hello</p>
    <p v-for="item in items" v-bind:ref="'item' + item.id"></p>
    Satu lagi kelebihan pendekatan ini ialah: apabila fungsi membalut Apabila masa pelaksanaan adalah sama kepada masa kelewatan, ia akan menunggu lebih lama. Sebagai contoh, apabila memberikan cadangan carian, anda perlu menunggu pengguna berhenti memasukkan untuk tempoh masa sebelum memberikan cadangan, yang merupakan pengalaman yang sangat buruk. Malah, lebih sesuai menggunakan fungsi

    throttling
    ketika ini. Memandangkan anda kini mempunyai kebebasan untuk menggunakan perpustakaan seperti lodash, anda boleh memfaktorkan semula projek anda dengan cepat menggunakan pendikit. 🎜🎜🎜🎜🎜Naik Taraf Laluan🎜🎜🎜🎜Jalankan 🎜alat migrasi🎜 menggunakan parameter debounce. 🎜🎜🎜🎜🎜

    🎜🎜Gunakan v-model dengan parameter lazy atau number. Penggantian 🎜🎜🎜🎜 Parameter lazy dan number kini digunakan sebagai pengubah suai supaya ia kelihatan lebih jelas dan bukannya ini: 🎜

    <p v-for="item in items" ref="items"></p>
    🎜Kini ia ditulis seperti ini:🎜
    <p v-if="foo">Foo</p>
    <p v-else v-show="bar">Not foo, but bar</p>
    🎜🎜🎜🎜Kaedah naik taraf🎜🎜🎜🎜Jalankan 🎜alat migrasi🎜 untuk mencari parameter yang ditamatkan ini. 🎜🎜


    v-model menggunakan nilai sebaris Alih keluarvaluev-model 移除

    v-model 不再以内联 value 方式初始化的初值了,显然他将以实例的 data 相应的属性作为真正的初值。

    这意味着以下元素:

    <p v-if="foo">Foo</p>
    <p v-if="!foo && bar">Not foo, but bar</p>

    在 data 选项中有下面写法的:

    <p v-my-directive.literal="foo bar baz"></p>

    将渲染 model 为 ‘bar’ 而不是 ‘foo’ 。同样,对 <textarea> 已有的值来说:

    <p v-my-directive="'foo bar baz'"></p>

    必须保证 text 初值为 “hello world”

    升级方式

    升级后运行端对端测试,注意关于v-model内联参数的 console warnings


    v-model with v-for Iterated Primitive Values 移除

    像这样的写法将失效:

    // v-on:keyup.f1 不可用
    Vue.config.keyCodes.f1 = 112

    因为 <input> 将被编译成类似下面的 js 代码:

    Todos
    ├─ NewTodoInput
    └─ Todo
       └─ DeleteTodoButton

    这样,v-model 的双向绑定在这里就失效了。把 str 赋值给迭代器里的另一个值也没有用,因为它仅仅是函数内部的一个变量。

    替代方案是,你可以使用对象数组,这样v-model 就可以同步更新对象里面的字段了,例如:

    // 将在各处使用该事件中心
    // 组件通过它来通信
    var eventHub = new Vue()

    升级方式

    运行测试,如果你的 app 有地方被这个更新影响到的话将会弹出failed tests提示。


    带有 !importantv-bind:style 移除

    这样写将失效:

    // NewTodoInput
    // ...
    methods: {
      addTodo: function () {
        eventHub.$emit('add-todo', { text: this.newTodoText })
        this.newTodoText = ''
      }
    }

    如果确实需要覆盖其它的 !important,最好用字符串形式去写:

    // DeleteTodoButton
    // ...
    methods: {
      deleteTodo: function (id) {
        eventHub.$emit('delete-todo', id)
      }
    }

    升级方式

    运行 迁移帮助工具。找到含有 !important

    v-model tidak lagi memulakan nilai awal dalam cara value sebaris Jelas sekali, ia akan menggunakan atribut data contoh yang sepadan sebagai nilai awal sebenar.
    🎜Ini bermakna elemen berikut: 🎜
    // Todos
    // ...
    created: function () {
      eventHub.$on('add-todo', this.addTodo)
      eventHub.$on('delete-todo', this.deleteTodo)
    },
    // 最好在组件销毁前
    // 清除事件监听
    beforeDestroy: function () {
      eventHub.$off('add-todo', this.addTodo)
      eventHub.$off('delete-todo', this.deleteTodo)
    },
    methods: {
      addTodo: function (newTodo) {
        this.todos.push(newTodo)
      },
      deleteTodo: function (todoId) {
        this.todos = this.todos.filter(function (todo) {
          return todo.id !== todoId
        })
      }
    }
    🎜dengan yang berikut dalam pilihan data: 🎜
    <input v-on:keyup="doStuff | debounce 500">
    🎜 akan menjadikan model sebagai 'bar' dan bukannya 'foo' . Begitu juga, untuk nilai sedia ada <textarea>: 🎜
    methods: {
      doStuff: function () {
        // ...
      }
    }
    🎜mesti memastikan bahawa nilai awal text ialah "hello world"🎜
    🎜🎜Kaedah naik taraf 🎜 🎜Jalankan ujian hujung ke hujung selepas menaik taraf, memberi perhatian kepada 🎜amaran konsol tentang v-model parameter sebaris🎜🎜🎜🎜🎜

    🎜🎜v-model🎜🎜 dengan v-for Nilai Primitif Berulang Alih keluar 🎜🎜Tulisan seperti ini akan menjadi tidak sah: 🎜

    <input v-on:keyup="doStuff">
    🎜Kerana <input> akan dikumpulkan ke dalam js serupa dengan yang berikut: 🎜
    methods: {
      doStuff: _.debounce(function () {
        // ...
      }, 500)
    }
    🎜Dengan cara ini, pengikatan dua hala v-model tidak sah di sini. Menugaskan str kepada nilai lain dalam iterator tidak berguna kerana ia hanyalah pembolehubah di dalam fungsi. 🎜🎜Alternatifnya ialah anda boleh menggunakan tatasusunan objek supaya v-model boleh mengemas kini medan dalam objek secara serentak, contohnya: 🎜
    <p v-for="item in items | limitBy 10">{{ item }}</p>
    🎜🎜Naik taraf kaedah🎜🎜Jalankan ujian jika Jika apl anda terjejas oleh kemas kini ini, gesaan ujian yang gagal akan muncul. 🎜🎜🎜🎜🎜

    🎜🎜v-bind:style dengan !penting Alih keluar sup >🎜🎜Menulis seperti ini akan menjadi tidak sah:🎜

    <p v-for="item in filteredItems">{{ item }}</p>
    🎜Jika anda benar-benar perlu menutup !penting lain, sebaiknya tuliskannya dalam bentuk rentetan:🎜
    computed: {
      filteredItems: function () {
        return this.items.slice(0, 10)
      }
    }
    🎜🎜Kaedah naik taraf< /strong> 🎜🎜Jalankan Alat Pembantu Migrasi. Cari objek mengikat gaya yang mengandungi !penting. 🎜🎜


    v-el dan v-ref penggantianv-elv-ref 替换

    简单起见,v-elv-ref 合并为一个 ref 属性了,可以在组件实例中通过 $refs 来调用。这意味着 v-el:my-element 将写成这样:ref="myElement"v-ref:my-component 变成了这样:ref="myComponent"。绑定在一般元素上时,ref 指 DOM 元素,绑定在组件上时,ref 为一组件实例。

    因为 v-ref 不再是一个指令了而是一个特殊的属性,它也可以被动态定义了。这样在和 v-for 结合的时候是很有用的:

    <p v-for="user in users | filterBy searchQuery in 'name'">{{ user.name }}</p>

    以前 v-el/v-refv-for 一起使用将产生一个 DOM 数组或者组件数组,因为没法给每个元素一个特定名字。现在你还仍然可以这样做,给每个元素一个同样的ref

    <p v-for="user in filteredUsers">{{ user.name }}</p>

    和 1.x 中不同,$refs 不是响应的,因为它们在渲染过程中注册/更新。只有监听变化并重复渲染才能使它们响应。

    另一方面,设计$refs主要是提供给 js 程序访问的,并不建议在模板中过度依赖使用它。因为这意味着在实例之外去访问实例状态,违背了 Vue 数据驱动的思想。

    升级方式

    运行迁移工具找出实例中的 v-el 和 v-ref 。


    v-show后面使用v-else 移除

    v-else 不能再跟在 v-show后面使用。请在v-if的否定分支中使用v-show来替代。例如:

    computed: {
      filteredUsers: function () {
        var self = this
        return self.users.filter(function (user) {
          return user.name.indexOf(self.searchQuery) !== -1
        })
      }
    }

    现在应该写出这样:

    var self = this
    self.users.filter(function (user) {
      var searchRegex = new RegExp(self.searchQuery, 'i')
      return user.isActive && (
        searchRegex.test(user.name) ||
        searchRegex.test(user.email)
      )
    })

    升级方式

    运行迁移工具找出实例中存在的 v-else 以及 v-show

    Untuk kesederhanaan, v-el dan v-ref Digabungkan ke dalam atribut ref, yang boleh dipanggil melalui $refs dalam contoh komponen. Ini bermakna v-el:my-element akan ditulis seperti ini: ref="myElement", dan v-ref:my-component menjadi Seperti ini: ref="myComponent". Apabila terikat kepada elemen umum, ref merujuk kepada elemen DOM Apabila terikat kepada komponen, ref ialah contoh komponen.
    🎜Oleh kerana v-ref bukan lagi arahan tetapi atribut khas, ia juga boleh ditakrifkan secara dinamik. Ini berguna apabila digabungkan dengan v-for: 🎜
    <p v-for="user in users | orderBy 'name'">{{ user.name }}</p>
    🎜Sebelum ini v-el/v-ref dan Digunakan bersama-sama dengan v -forakan menghasilkan tatasusunan DOM atau tatasusunan komponen, kerana tiada cara untuk memberikan setiap elemen nama tertentu. Anda masih boleh melakukan ini dan memberikan setiap elemen ref yang sama: 🎜
    <p v-for="user in orderedUsers">{{ user.name }}</p>
    🎜Tidak seperti dalam 1.x, $refs tidak responsif kerana ia Daftar/kemas kini semasa pemaparan. Hanya mendengar perubahan dan membuat persembahan berulang kali boleh menjadikannya responsif. 🎜🎜Sebaliknya, $refs direka terutamanya untuk diakses oleh program js, dan tidak disyorkan untuk terlalu bergantung padanya dalam templat. Kerana ini bermakna mengakses keadaan contoh di luar contoh, yang bertentangan dengan pemikiran terdorong data Vue. 🎜
    🎜 Kaedah naik taraf🎜🎜Jalankan Alat Migrasi untuk mengetahui contoh v-el dan v-ref . 🎜🎜🎜🎜🎜

    v-showGunakan v-else Alih keluar🎜🎜v -else tidak lagi boleh digunakan selepas v-show. Sila gunakan v-show sebaliknya dalam cabang negatif v-if. Contohnya: 🎜

    computed: {
      orderedUsers: function () {
        return _.orderBy(this.users, 'name')
      }
    }
    🎜 kini sepatutnya ditulis seperti ini: 🎜
    _.orderBy(this.users, ['name', 'last_login'], ['asc', 'desc'])
    🎜Kaedah naik taraf🎜🎜JalankanAlat migrasi mengetahui sama ada v-else dan v-show wujud dalam contoh. 🎜🎜


    Arahan tersuai Pemudahan


    Dalam versi baharu, skop penggunaan arahan telah dikurangkan dengan banyak: kini arahan hanya digunakan untuk operasi DOM peringkat rendah. Dalam kebanyakan kes, sebaiknya gunakan komponen sebagai lapisan abstraksi untuk penggunaan semula kod.

    Perubahan ketara adalah seperti berikut:

    • Arahan tidak lagi mempunyai contoh. Maksudnya, anda tidak lagi mempunyai contoh ini dalam fungsi cangkuk arahan. Sebaliknya, anda boleh menerima sebarang data yang anda perlukan dalam parameter. Jika anda benar-benar memerlukannya, anda boleh mengakses contoh melalui el. this 。替代的是,你可以在参数中接受你需要的任何数据。如果确实需要,可以通过 el 来访问实例。

    • 类似 acceptStatementdeeppriority 等都已被弃用。为了替换双向指令,见 示例

    • 现在有些钩子的意义和以前不一样了,并且多了两个钩子函数。

    幸运的是,新钩子更加简单,更加容易掌握。详见 自定义指令指南

    升级方式

    运行迁移工具找出定义指令的地方。在 helper 工具会把这些地方标记出来,因为很有可能这些地方需要重构。


    指令 .literal

  • Serupa dengan acceptStatement, deep, prioriti, dsb. telah ditamatkan. Untuk menggantikan arahan dwiarah, lihat contoh .

    Kini maksud beberapa cangkuk berbeza dari dahulu, dan terdapat dua lagi fungsi cangkuk.

    Nasib baik, cangkuk baru lebih ringkas dan mudah untuk dikuasai. Untuk mendapatkan butiran, lihat Panduan Arahan Tersuai

    .

    🎜🎜

    🎜Pengubah .literal 🎜Alih keluar🎜🎜🎜🎜🎜 pengubah suai telah dialih keluar dan untuk mendapatkan kefungsian yang sama, anda hanya boleh menyediakan pengubah rentetan sebagai nilai. 🎜🎜Contoh, tukar kepada: 🎜

    <p>{{ date | formatDate 'YY-MM-DD' timeZone }}</p>
    🎜Hanya: 🎜
    <p>{{ date | formatDate('YY-MM-DD', timeZone) }}</p>
    🎜🎜🎜🎜Naik taraf cara🎜🎜🎜🎜Jalankan 🎜alat migrasi🎜 untuk mengetahui di mana instance` berada. 🎜🎜


    Peralihan



    transition 参数 替换

    Vue 的过渡系统有了彻底的改变,现在通过使用 <transition><transition-group> 来包裹元素实现过渡效果,而不再使用 transition 属性。详见 Transitions guide

    升级方式

    运行迁移工具找到使用 transition 属性的地方。


    可复用的过渡 Vue.transition 替换

    在新的过渡系统中,可以通过模板复用过渡效果

    升级方式

    运行迁移工具找到使用 transition 属性的地方。


    过渡的 stagger 参数 移除

    如果希望在列表渲染中使用渐近过渡,可以通过设置元素的 data-index (或类似属性) 来控制时间。请参考这个例子

    升级方式

    运行迁移工具找到使用 transitiontransition

    >
    Parameter Penggantian🎜🎜🎜🎜🎜Sistem peralihan Vue telah ditukar sepenuhnya, kini melalui penggunaan <transition> dan <transition-group> ; untuk membalut elemen untuk mencapai kesan peralihan, bukannya menggunakan atribut transition. Lihat Panduan peralihan untuk mendapatkan butiran. 🎜
    🎜🎜Kaedah naik taraf 🎜🎜🎜🎜Jalankan Alat Migrasi untuk mencari atribut peralihan tempat. 🎜🎜🎜🎜🎜

    🎜Peralihan boleh guna semulaVue.transition penggantian🎜 🎜🎜🎜Dalam sistem peralihan baharu, anda boleh menggunakan semula kesan peralihan melalui templat . 🎜

    🎜🎜Kaedah naik taraf 🎜🎜🎜🎜Jalankan Alat Migrasi untuk mencari atribut peralihan tempat. 🎜🎜🎜🎜🎜

    🎜Parameter stagger peralihan dialih keluar🎜 🎜🎜 🎜Jika anda ingin menggunakan peralihan beransur-ansur dalam pemaparan senarai, anda boleh mengawal pemasaan dengan menetapkan data-index elemen (atau atribut serupa). Sila rujuk contoh ini. 🎜

    🎜🎜Kaedah naik taraf 🎜🎜🎜🎜Jalankan Alat Migrasi untuk mencari atribut peralihan tempat. Semasa naik taraf, anda boleh "peralihan" kepada strategi peralihan baharu. 🎜🎜


    Acara



    events 选项 移除

    events 选项被弃用。事件处理器现在在 created 钩子中被注册。参考详细示例 $dispatch and $broadcast 迁移指南


    Vue.directive('on').keyCodes 替换

    新的简明配置 keyCodes 的方式是通过 Vue.config.keyCodes例如:

    text[0].toUpperCase() + text.slice(1)

    升级方式

    运行迁移工具找到过时的 keyCodeevents

    >
    alih keluar🎜🎜🎜🎜acara telah ditamatkan. Pengendali acara kini didaftarkan dalam cangkuk dibuat. Rujuk contoh terperinci$dispatch dan $broadcast panduan migrasi 🎜🎜🎜🎜

    🎜Vue.directive('on').keyCodes🎜🎜< /code >🎜 Penggantian🎜🎜🎜🎜Cara ringkas baharu untuk mengkonfigurasi keyCodes adalah melalui Vue. config. keyCodesContohnya: 🎜

    text.toUpperCase()
    🎜🎜Kaedah naik taraf🎜🎜🎜🎜Jalankan Alat Migrasi ke cari < code>keyCode Konfigurasi🎜🎜 yang lapuk


    $dispatch dan $broadcast penggantian$dispatch$broadcast 替换

    $dispatch$broadcast 已经被弃用。请使用更多简明清晰的组件间通信和更好的状态管理方案,如:Vuex

    因为基于组件树结构的事件流方式实在是让人难以理解,并且在组件结构扩展的过程中会变得越来越脆弱。这种事件方式确实不太好,我们也不希望在以后让开发者们太痛苦。并且$dispatch$broadcast 也没有解决兄弟组件间的通信问题。

    对于$dispatch$broadcast最简单的升级方式就是:通过使用事件中心,允许组件自由交流,无论组件处于组件树的哪一层。由于 Vue 实例实现了一个事件分发接口,你可以通过实例化一个空的 Vue 实例来实现这个目的。

    这些方法的最常见用途之一是父子组件的相互通信。在这些情况下,你可以使用 v-on 监听子组件上 $emit 的变化。这可以允许你很方便的添加事件显性。

    然而,如果是跨多层父子组件通信的话,$emit 并没有什么用。相反,用集中式的事件中间件可以做到简单的升级。这会让组件之间的通信非常顺利,即使是兄弟组件。因为 Vue 通过事件发射器接口执行实例,实际上你可以使用一个空的 Vue 实例。

    比如,假设我们有个 todo 的应用结构如下:

    text.toLowerCase()

    可以通过单独的事件中心管理组件间的通信:

    function pluralizeKnife (count) {
      if (count === 0) {
        return 'no knives'
      } else if (count === 1) {
        return '1 knife'
      } else {
        return count + 'knives'
      }
    }

    然后在组件中,可以使用 $emit, $on, $off 分别来分发、监听、取消监听事件:

    '$' + price.toFixed(2)
    <keep-alive>
      <component v-bind:is="view"></component>
    </keep-alive>
    <keep-alive>
      <todo-list v-if="todos.length > 0"></todo-list>
      <no-todos-gif v-else></no-todos-gif>
    </keep-alive>

    在简单的情况下这样做可以替代 $dispatch$broadcast,但是对于大多数复杂情况,更推荐使用一个专用的状态管理层如:Vuex

    升级方式

    运行迁移工具找出使用 $dispatch 和 $broadcast

    $dispatch dan $broadcast Sudah ditamatkan. Sila gunakan komunikasi antara komponen yang lebih ringkas dan jelas serta penyelesaian pengurusan keadaan yang lebih baik, seperti: Vuex.
    🎜Sebab kaedah aliran peristiwa berdasarkan struktur pokok komponen memang sukar untuk difahami, dan akan menjadi semakin rapuh apabila struktur komponen mengembang. Kaedah acara ini benar-benar tidak bagus dan kami tidak mahu menyebabkan pembangun terlalu sakit pada masa hadapan. Dan $dispatch dan $broadcast tidak menyelesaikan masalah komunikasi antara komponen adik-beradik. 🎜🎜Cara paling mudah untuk meningkatkan $dispatch dan $broadcast ialah menggunakan pusat acara untuk membolehkan komponen berkomunikasi dengan bebas, tidak kira lapisan mana ia berada dalam pepohon komponen. Memandangkan tika Vue melaksanakan antara muka penghantaran acara, anda boleh mencapai ini dengan membuat seketika tika Vue kosong. 🎜🎜Salah satu kegunaan yang paling biasa bagi kaedah ini adalah untuk komponen ibu bapa-anak untuk berkomunikasi antara satu sama lain. Dalam kes ini, anda boleh menggunakan v-on untuk mendengar anak Komponen Perubahan dalam $emit. Ini membolehkan anda menambah keterlihatan acara dengan mudah. 🎜🎜Walau bagaimanapun, jika anda berkomunikasi merentasi berbilang lapisan komponen ibu bapa-anak, $emit tidak berguna. Sebaliknya, menggunakan perisian tengah acara terpusat membolehkan peningkatan mudah. Ini menjadikan komunikasi antara komponen sangat lancar, walaupun mereka adalah adik-beradik. Oleh kerana Vue melaksanakan kejadian melalui antara muka pemancar peristiwa, anda sebenarnya boleh menggunakan tika Vue kosong. 🎜🎜Sebagai contoh, katakan kita mempunyai struktur aplikasi todo seperti berikut: 🎜
    <transition>
      <keep-alive>
        <component v-bind:is="view"></component>
      </keep-alive>
    </transition>
    🎜 Anda boleh menguruskan komunikasi antara komponen melalui pusat acara yang berasingan: 🎜
    <button class="btn btn-{{ size }}"></button>
    🎜 Kemudian dalam komponen, anda boleh menggunakan $emit , < code>$on, $off digunakan untuk mengedar, memantau dan membatalkan acara mendengar masing-masing: 🎜
    <button v-bind:class="'btn btn-' + size"></button>
    <button v-bind:class="buttonClasses"></button>
    computed: {
      buttonClasses: function () {
        return 'btn btn-' + size
      }
    }
    🎜Dalam kes mudah, ini boleh menggantikan $dispatch dan $broadcast, tetapi untuk kebanyakan situasi yang rumit adalah disyorkan untuk menggunakan lapisan pengurusan keadaan khusus seperti: Vuex. 🎜
    🎜 Kaedah naik taraf🎜🎜Jalankan Alat Migrasi untuk mengetahui cara untuk menggunakan < Instance of code>$dispatch dan $broadcast. 🎜🎜


    Penapis



    Penapis di luar teks yang disisipkanDialih keluar
    hanya boleh digunakan dalam kod.<

    >{{ }} tag). Kami mendapati bahawa menggunakan penapis dalam arahan (cth. v-model, v-on, dll.) menjadikan perkara lebih rumit. Untuk penapis senarai seperti v-for sebaiknya letakkan logik pemprosesan dalam js sebagai sifat yang dikira supaya ia boleh digunakan semula sepanjang templat. {{ }} tags)。我们发现在指令 (如:v-modelv-on等) 中使用过滤器使事情变得更复杂。像 v-for 这样的列表过滤器最好把处理逻辑作为一个计算属性放在 js 里面,这样就可以在整个模板中复用。

    总之,能在原生 js 中实现的东西,我们尽量避免引入一个新的符号去重复处理同样的问题。下面是如何替换 Vue 内置过滤器:


    替换 debounce 过滤器

    不再这样写

    methods: {
      removeTodo: function (todo) {
        var index = this.todos.indexOf(todo)
        this.todos.splice(index, 1)
      }
    }
    methods: {
      removeTodo: function (index) {
        this.todos.splice(index, 1)
      }
    }

    请使用 lodash’s debounce (也有可能是 throttle) 来直接控制高耗任务。可以这样来实现上面的功能:

    myElement.appendChild(vm.$el)
    myElement.parentNode.insertBefore(vm.$el, myElement)

    这种写法的更多优点详见:v-model 示例。


    替换 limitBy 过滤器

    不再这样写:

    myElement.parentNode.insertBefore(vm.$el, myElement.nextSibling)

    在 computed 属性中使用 js 内置方法:.slice method

    myElement.parentNode.appendChild(vm.$el)
    vm.$el.remove()


    替换 filterBy 过滤器

    不再这样写:

    new Vue({
      el: '#app',
      template: '<div id="app"> ... </div>'
    })

    在 computed 属性中使用 js 内置方法 .filter method

    new Vue({
      el: '#app',
      render: function (h) {
        h('div', {
          attrs: {
            id: 'app',
          }
        }, /* ... */)
      }
    })
    rrreee

    js 原生的 .filter 同样能实现很多复杂的过滤器操作,因为可以在计算 computed 属性中使用所有 js 方法。比如,想要通过匹配用户名字和电子邮箱地址 (不区分大小写) 找到用户:

    rrreee


    替换 orderBy 过滤器

    不这样写:

    rrreee

    而是在 computed 属性中使用 lodash’s orderBy (或者可能是 sortByRingkasnya, untuk perkara yang boleh dilaksanakan dalam js asli, kami cuba mengelak daripada memperkenalkan simbol baru untuk menangani masalah yang sama berulang kali. Begini cara untuk menggantikan penapis terbina dalam Vue:

    Ganti penapis debounce Tidak lagi ditulis seperti ini

    rrreeerrreee

    Sila gunakan lodash's debounce (mungkin juga throttle) untuk mengawal secara langsung tugas memakan tinggi. Fungsi di atas boleh dilaksanakan seperti ini: rrreeerrreeeUntuk lebih banyak kelebihan kaedah penulisan ini, lihat: contoh v-model.

    🎜🎜🎜🎜Ganti penapis limitBy 🎜🎜🎜Tidak lagi menulis seperti ini: 🎜rrreee🎜Gunakan kaedah terbina dalam js dalam atribut yang dikira: .slice kaedah🎜: 🎜rrreeerrreee🎜🎜🎜🎜 penempatan🎜 filterBy Penapis 🎜🎜🎜 tidak lagi ditulis seperti ini: 🎜rrreee🎜Gunakan kaedah terbina dalam js dalam atribut yang dikira kaedah.penapis🎜:🎜rrreeerrreee🎜js asli .penapis juga boleh mencapai banyak operasi penapisan kerumitan kerana semua kaedah js boleh digunakan dalam sifat yang dikira. Sebagai contoh, untuk mencari pengguna dengan memadankan nama dan alamat e-mel mereka (tidak peka huruf besar-kecil): 🎜rrreee🎜🎜🎜🎜🎜Ganti penapis pesananDengan 🎜🎜🎜 dan bukannya menulis: 🎜rrreee🎜 ialah menggunakan lodash orderBy🎜 dalam atribut yang dikira (atau mungkin isih Mengikut🎜): 🎜rrreeerrreee🎜Isihan medan sekata:🎜rrreee🎜🎜🎜🎜Cara Naik taraf 🎜🎜 🎜jalankan 🎜Alat Migrasi🎜 untuk mencari penapis yang digunakan dalam arahan. Jika ada yang tidak ditemui, lihat 🎜mesej ralat konsol🎜. 🎜🎜


    Tanda parameter penapistukar

    Kini borang parameter penapis boleh lebih konsisten dengan kaedah panggilan fungsi js, jadi tidak perlu memisahkan parameter dengan ruang:

    Nowreee

    tertutup kurungan Dan dipisahkan dengan koma:

    rrreee

    Kaedah naik taraf

    Jalankan alat penghijrahan untuk mencari simbol panggilan lama Jika ada yang hilang, sila lihat mesej ralat .


    Penapis teks terbina dalam Dialih keluar

    Semua penapis terbina dalam telah dialih keluar, walaupun penapis yang dimasukkan ke dalam teks masih sah. Sebaliknya, adalah disyorkan untuk menggunakan lebih banyak perpustakaan khusus untuk setiap kawasan. (Sebagai contoh, gunakan date-fnsdate-fns 来格式化日期,用 accounting 来格式化货币)。

    对于每个内置过滤器,我们大概总结了下该怎么替换。代码示例可能写在自定义 helper 函数,方法或计算属性中。


    替换 json 过滤器

    不用一个个改,因为 Vue 已经帮你自动格式化好了,无论是字符串,数字还是数组,对象。如果想用 js 的 JSON.stringify 功能去实现,你也可以把它写在方法或者计算属性里面。


    替换 capitalize 过滤器

    rrreee


    替换 uppercase 过滤器

    rrreee


    替换 lowercase 过滤器

    rrreee


    替换 pluralize 过滤器

    NPM 上的 pluralize 库可以很好的实现这个功能。如果仅仅想将特定的词格式化成复数形式或者想给特定的值 (‘0’) 指定特定的输出,也可以很容易地自定义复数格式化过滤器:

    rrreee


    Replacing the currency Filter

    对于简单的问题,可以这样做:

    rrreee

    大多数情况下,仍然会有奇怪的现象 (比如 0.035.toFixed(2) 向上取舍得到 0.04,但是 0.045 向下取舍却也得到 0.04)。解决这些问题可以使用 accounting untuk memformat tarikh, gunakan perakaunan untuk memformat mata wang).

    Untuk setiap penapis terbina dalam, kami meringkaskan secara kasar cara menggantikannya. Contoh kod boleh ditulis dalam fungsi pembantu tersuai, kaedah atau sifat yang dikira.

    Gantikan penapis json

    Anda tidak perlu menukarnya satu persatu, kerana Vue telah memformatkannya secara automatik untuk anda, sama ada rentetan, nombor, tatasusunan, atau objek. Jika anda ingin menggunakan fungsi JSON.stringify js untuk melaksanakannya, anda juga boleh menulisnya dalam kaedah atau atribut yang dikira.

    🎜🎜Replaces Capmitize filter 🎜🎜rrreeee🎜🎜🎜🎜🎜Replaces huruf besar penapis 🎜🎜rrreeee🎜🎜🎜🎜🎜replaces huruf kecil < /code> penapis 🎜🎜rrreee🎜🎜🎜🎜🎜menggantikan penapis pluralize 🎜🎜🎜pluralize🎜 perpustakaan boleh melaksanakan fungsi ini dengan baik. Jika anda hanya ingin memformat perkataan tertentu ke dalam bentuk jamak atau ingin menentukan output khusus untuk nilai tertentu ('0'), anda juga boleh menyesuaikan penapis pemformatan jamak dengan mudah: 🎜rrreee🎜🎜🎜🎜🎜Menggantikan < kod> mata wang Filter🎜🎜🎜Untuk masalah mudah, anda boleh melakukan ini:🎜rrreee🎜Dalam kebanyakan kes, masih akan ada fenomena aneh (seperti 0.035.toFixed(2) Up Rounding off menghasilkan 0.04, tetapi membulatkan ke bawah juga menghasilkan 0.045). Untuk menyelesaikan masalah ini, anda boleh menggunakan perpustakaan perakaunan🎜 untuk mencapai mata wang yang lebih dipercayai memformat . 🎜🎜🎜🎜🎜Cara menaik taraf🎜🎜🎜🎜Jalankan 🎜alat migrasi🎜 untuk mencari penapis yang dibuang. Jika ada yang hilang, sila rujuk 🎜Mesej ralat konsol🎜. 🎜🎜. Walaupun mudah di permukaan, penapis dwiarah boleh menyembunyikan beberapa kerumitan besar—malah menjadikan kemas kini status menjadi perlahan dan memberi kesan kepada pengalaman pengguna. Adalah disyorkan untuk menggunakan komponen yang membungkus input sebaliknya, membolehkan anda membuat input tersuai dengan cara yang lebih jelas dan kaya dengan ciri.


    Kami kini melakukan migrasi penapis kadar pertukaran dua hala sebagai demonstrasi:

    它基本工作良好,但是拖延的状态更新会导致奇怪的行为。比如,点击 Result 标签,试着在其中一个输入框中输入 9.999。当输入框失去焦点的时候,其值将会更新到 .00。然而当我们从整个计算器的角度看时,你会发现存储的数据是 9.999。用户看到的已经不是真实的同步了!

    为了过渡到一个更加健壮的 Vue 2.0 的方案,让我们首先在一个新的 <currency-input> 组件中包裹这个过滤器:

    它允许我们添加独立过滤器无法封装的行为,比如选择输入框聚焦的内容。下一步我们从过滤器中提取业务逻辑。接下来是我们把所有的东西放到一个外部的 currencyValidatorIa membolehkan kami menambah penapis bebas Kelakuan yang tidak boleh dikapsulkan, seperti memilih kandungan fokus kotak input. Seterusnya kami mengekstrak logik perniagaan daripada penapis. Seterusnya kami meletakkan segala-galanya ke dalam objek currencyValidator

    :

      ini akan menjadi lebih modular, bukan sahaja lebih mudah untuk berhijrah ke Vue 2, tetapi juga membenarkan jurang kadar pertukaran dan pemformatan:
    • Asingkan ujian unit daripada kod Vue anda
    • Gunakannya di bahagian lain aplikasi anda, seperti mengesahkan beban sisi API

    Selepas mengekstrak pengesah ini, kami juga boleh membinanya dengan lebih selesa menjadi penyelesaian yang lebih mantap. Keadaan aneh itu juga dihapuskan, dan pengguna tidak lagi mungkin memasukkan ralat, sama seperti kotak input nombor asli penyemak imbas.

    Walau bagaimanapun, dalam penapis Vue 1.0, kami masih terhad, jadi mari kita tingkatkan sepenuhnya kepada Vue 2.0:

    🎜Anda mungkin perasan: 🎜
    • Setiap aspek kotak input kami lebih jelas, menggunakan cangkuk kitaran hayat dan peristiwa DOM untuk menggantikan gelagat tersembunyi penapis dua arah.

    • Kami kini boleh menggunakan v-model secara langsung dalam kotak input tersuai Ia bukan sahaja digunakan dengan kotak input biasa, tetapi juga bermakna komponen kami mesra Vuex. v-model,其不只是固定配合正常的输入框来使用,这也意味着我们的组件是对 Vuex 友好的。

    • 因为我们已经不再要求过滤器选项必须要有一个返回值,所以实际上我们的汇率工作可以异步完成。这意味着如果我们有很多应用需要和汇率打交道,我们可以轻松的提炼这个逻辑并成为一个共享的微服务。

    升级方式

    运行迁移工具找到在例如 v-model 的指令中使用过滤器的例子。如果你错过了,则应该会收到命令行报错


    插槽



    重名的插槽 移除

    同一模板中的重名 <slot> 已经弃用。当一个插槽已经被渲染过了,那么就不能在同一模板其它地方被再次渲染了。如果要在不同位置渲染同一内容,可以用 prop 来传递。

    升级方式

    更新后运行测试,查看控制台警告信息 关于重名 slots 的提示 v-model


    slot 样式参数 移除

    通过具名 <slot> 插入的片段不再保持 slot 的参数。请用一个包裹元素来控制样式。或者用更高级方法:通过编程方式修改内容 :render functions

    升级方式

    运行迁移工具找到选择 slots 标签 CSS 选择器 (例如:[slot="my-slot-name"]

    🎜Oleh kerana kami tidak lagi memerlukan pilihan penapis untuk mempunyai nilai pulangan, kerja kadar pertukaran kami sebenarnya boleh dilakukan secara tidak segerak. Ini bermakna jika kami mempunyai banyak aplikasi yang berurusan dengan kadar pertukaran, kami boleh memperhalusi logik ini dengan mudah dan menjadikannya perkhidmatan mikro yang dikongsi. 🎜🎜
    🎜Kaedah naik taraf🎜🎜Jalankan Alat migrasiCari contoh penggunaan penapis dalam arahan seperti v-model. Jika anda terlepas, anda sepatutnya mendapat ralat baris arahan. 🎜🎜🎜
    🎜

    slot


    🎜
    🎜

    Slot dengan nama yang samaAlih keluar
    🎜🎜Nama pendua dalam templat <slot> telah ditamatkan. Sebaik sahaja slot telah diberikan, ia tidak boleh dipaparkan lagi di tempat lain dalam templat yang sama. Jika anda ingin memaparkan kandungan yang sama di lokasi yang berbeza, anda boleh menggunakan prop untuk menghantarnya. 🎜

    🎜 Kaedah naik taraf🎜🎜Jalankan ujian selepas kemas kini dan semak Mesej amaran Konsol untuk mendapatkan petua tentang slot bernama pendua model v. 🎜🎜🎜
    🎜

    slot Parameter gaya Alih keluar🎜🎜Dengan menamakan kod <slot> Serpihan yang dimasukkan tidak lagi mengekalkan parameter slot. Sila gunakan elemen pembalut untuk mengawal penggayaan. Atau ambil pendekatan yang lebih maju: ubah suai kandungan secara pengaturcaraan: fungsi render. 🎜

    🎜 Kaedah naik taraf🎜🎜Jalankan Alat Migrasi untuk mencari dan memilih pemilih CSS teg slot (contohnya: [slot="my-slot-name"]). 🎜🎜


    Harta istimewa



    keep-alive 属性 替换

    keep-alive 不再是一个特殊属性而是一个包裹组件,类似于 <transition>比如:

    rrreee

    这样可以在含多种状态子组件中使用 <keep-alive>

    rrreee

    当 <keep-alive> 含有不同子组件时,应该分别影响到每一个子组件。不仅是第一个而是所有的子组件都将被忽略。

    <transition>一起使用时,确保把内容包裹在内:

    rrreee

    升级方式

    运行迁移工具找到keep-alive 属性。


    计算插值



    属性内部的计算插值 移除

    属性内部的计算插值已经不能再使用了:

    rrreee

    应该写成行内表达式:

    rrreee

    或者计算属性:

    rrreeerrreee

    升级方式

    运行迁移工具找到属性内部的计算插值


    HTML 计算插值 移除

    HTML 的计算插值 ({{{ foo }}}) 已经移除,取代的是 v-htmlkeep-alive><

    style : 18px;">
    atribut penggantian

    kekal-hidup bukan lagi atribut khas tetapi komponen yang dibalut, serupa dengan <transition> ; Contohnya:

    rrreee

    Ini boleh digunakan dalam subkomponen dengan berbilang keadaan <keep-alive>: rrreee

    Apabila <keep-alive> ;< /code> Apabila ia mengandungi sub-komponen yang berbeza, ia harus mempengaruhi setiap sub-komponen secara berasingan. Bukan sahaja yang pertama tetapi semua komponen kanak-kanak akan diabaikan. . atribut keep-alive.

    🎜🎜🎜

    🎜🎜Calculated interpolation🎜🎜🎜🎜🎜🎜🎜

    Dialih keluar 🎜🎜🎜🎜🎜 Interpolasi yang dikira dalam atribut tidak boleh digunakan lagi: 🎜rrreee🎜 hendaklah ditulis sebagai ungkapan sebaris: 🎜rrreee🎜 atau sebagai atribut yang dikira: 🎜rrreee🎜 . ;">🎜 Interpolasi Pengiraan HTML Dialih keluar🎜🎜🎜🎜Interpolasi Pengiraan HTML ({{{ foo }}}) telah dialih keluar dan digantikan dengan v-html arahan 🎜. 🎜🎜🎜🎜🎜Kaedah naik taraf🎜🎜🎜🎜Jalankan 🎜alat migrasi🎜untuk mencari interpolasi pengiraan HTML. 🎜🎜


    Single BindingReplaced

    Single Binding ({{* foo }}) telah digantikan dengan v-sekali arahan{{* foo }}) 已经被新的 v-once directive 取代。

    升级方式

    运行迁移工具找到单次绑定使用位置。


    响应



    vm.$watch changed

    通过 vm.$watch创建的观察器现在将在组件渲染时被激活。这样可以让你在组件渲染前更新状态,不用做不必要的更新。比如可以通过观察组件的 prop 变化来更新组件本身的值。

    如果以前通过 vm.$watch 在组件更新后与 DOM 交互,现在就可以通过updated生命周期钩子来做这些。

    升级方式

    运行测试,如果有依赖于老方法的观察器将弹出 failed tests。


    vm.$set 变更

    vm.$set 只是 Vue.set 的别名。

    升级方式

    运行迁移工具找到过时的用法


    vm.$delete 变更

    vm.$delete 现在只是:Vue.delete diganti.

    Kaedah naik taraf

    Jalankan

    alat migrasi untuk mencari lokasi penggunaan pengikat tunggal.

    🎜🎜

    🎜respons🎜🎜


    🎜🎜🎜

    🎜🎜vm.$watch🎜🎜🎜🎜 🎜changed🎜🎜🎜🎜🎜Pemerhati yang dibuat melalui vm.$watch kini akan diaktifkan apabila komponen memaparkan . Ini membolehkan anda mengemas kini keadaan sebelum komponen diberikan tanpa membuat kemas kini yang tidak perlu. Sebagai contoh, anda boleh mengemas kini nilai komponen itu sendiri dengan memerhati perubahan dalam prop komponen. 🎜🎜Jika anda sebelum ini berinteraksi dengan DOM selepas kemas kini komponen melalui vm.$watch, anda kini boleh melakukan ini melalui cangkuk kitar hayat dikemas kini. 🎜🎜🎜🎜🎜Naik taraf kaedah🎜🎜🎜🎜Jalankan ujian, jika ada pemerhati yang bergantung pada kaedah lama, ujian yang gagal akan muncul. 🎜🎜🎜🎜🎜

    🎜🎜vm.$set🎜🎜🎜🎜 🎜Tukar🎜🎜🎜🎜🎜.$ > Hanya alias untuk Vue.set🎜. . >🎜🎜 🎜Perubahan🎜🎜🎜🎜🎜vm.$delete kini hanya: Vue.delete🎜 Alias. 🎜🎜🎜🎜🎜Cara untuk menaik taraf🎜🎜🎜🎜Jalankan 🎜alat migrasi🎜Cari penggunaan yang sudah lapuk🎜🎜. (73,195,140,0.1);border-radius: 2px;">


    Naik taraf kaedah

    Jalankan Alat Migrasi mencari .$set pada tatasusunan. Jika ada yang tertinggal, sila rujuk Mesej ralat konsol.

    Vue.set 替代

    升级方式

    运行迁移工具找到数组上的.$set。如有遗漏请参考控制台错误信息


    Array.prototype.$remove 移除

    Array.prototype.splice 替代,例如:

    rrreee

    或者更好的方法,直接给除去的方法一个 index 参数:

    rrreee

    升级方式

    运行迁移工具找到数组上的.$remove。如有遗漏请参考控制台错误信息


    Vue 实例上的Vue.setVue.delete移除

    Vue.setVue.delete 在实例上将不再起作用。现在都强制在实例的 data 选项中声明所有顶级响应值。如果删除实例属性或实例$data上的某个值,直接将它设置为 null 即可。

    升级方式

    运行迁移工具找到实例中的 Vue.set 或 Vue.delete 。如有遗漏请参考控制台错误信息


    替换 vm.$data 移除

    现在禁止替换实例的 $data。这样防止了响应系统的一些极端情况并且让组件状态更加可控可预测 (特别是对于存在类型检查的系统)。

    升级方式

    运行迁移工具找到覆盖 vm.$data

    Array.prototype.$remove

    🎜🎜 🎜Remove 🎜🎜🎜 , contohnya: 🎜rrreee🎜 Atau lebih baik lagi, terus berikan kaedah yang dialih keluar parameter indeks: 🎜rrreee
    🎜🎜Naik taraf kaedah🎜🎜🎜🎜JalankanAlat Migrasi menemui .$remove pada tatasusunan. Jika ada yang tertinggal, sila rujuk 🎜Mesej ralat konsol🎜. 🎜🎜🎜🎜🎜

    🎜🎜Vue.set dan Vue.delete🎜Alih keluar🎜🎜🎜 pada contoh Vue 🎜 🎜Vue.set dan Vue.delete tidak akan berfungsi lagi pada kejadian. Kini adalah wajib untuk mengisytiharkan semua nilai respons peringkat atas dalam pilihan data contoh. Jika anda memadamkan sifat instance atau nilai pada instance $data, cuma tetapkannya kepada null. 🎜

    🎜🎜Kaedah naik taraf 🎜🎜🎜🎜Jalankan Alat Migrasi untuk mencari Vue.set atau Vue.delete . Jika ada yang kurang, sila rujuk 🎜Mesej ralat konsol🎜. 🎜🎜🎜🎜🎜

    🎜🎜penggantian vm.$data 🎜pembuangan🎜🎜🎜🎜🎜penggantian $data instance kini dilarang. Ini menghalang sistem tindak balas daripada beberapa kes tepi dan menjadikan keadaan komponen lebih terkawal dan boleh diramal (terutamanya untuk sistem dengan pemeriksaan jenis). 🎜

    🎜🎜Kaedah naik taraf 🎜🎜🎜🎜Jalankan Alat Migrasi untuk mencari liputan vm.$data< /kod > lokasi. Jika ada yang kurang, sila rujuk 🎜Mesej amaran konsol🎜. 🎜🎜


    vm.$get 移除

    可以直接取回响应数据。

    升级方式

    运行迁移工具找到 vm.$get 的位置。如有遗漏请参考 控制台错误信息


    围绕 DOM 的实例方法



    vm.$appendTo 移除

    使用 DOM 原生方法:

    rrreee

    升级方式

    运行迁移工具找到 vm.$appendTo 的位置。如果有遗漏可以参考 控制台错误信息


    vm.$before 移除

    使用 DOM 原生方法:

    rrreee

    升级方式

    运行迁移工具找到 vm.$before。如有遗漏,请参考 控制台错误信息


    vm.$after 移除

    使用 DOM 原生方法:

    rrreee

    如果 myElement 是最后一个节点也可以这样写:

    rrreee

    升级方式

    运行迁移工具找到 vm.$aftervm.$get Alih keluar

    🎜 boleh terus mendapatkan semula data respons. 🎜
    🎜🎜Kaedah naik taraf 🎜🎜🎜Jalankan Alat Migrasi untuk mencari vm.$get lokasi. Jika ada yang kurang, sila rujuk 🎜Mesej ralat konsol🎜. 🎜🎜🎜🎜🎜

    🎜Kaedah contoh sekitar DOM🎜


    🎜🎜🎜 < p id="vm-$appendTo">🎜vm.$appendTo🎜🎜 Alih keluar🎜🎜🎜🎜Gunakan kaedah asli DOM: 🎜rrreee
    🎜🎜Kaedah naik taraf🎜🎜🎜Jalankan Alat migrasi mencari lokasi vm.$appendTo. Jika ada yang kurang, sila rujuk 🎜Mesej ralat konsol🎜. 🎜🎜🎜🎜🎜

    🎜vm.$before🎜🎜 Alih keluar🎜🎜🎜Gunakan kaedah asli DOM: 🎜rrreee

    🎜🎜Naik taraf kaedah🎜🎜🎜Jalankan Alat Migrasi menemui vm.$before. Jika ada yang kurang, sila rujuk 🎜Mesej ralat Konsol🎜. 🎜🎜🎜🎜🎜

    🎜vm.$after🎜🎜 Alih keluar🎜🎜🎜Gunakan kaedah asli DOM: 🎜rrreee🎜Jika myElement ialah nod terakhir, anda juga boleh menulis seperti ini: 🎜rrreee< div style ="margin-top: 2em;padding: 2em;background: rgba(73,195,140,0.1);border-radius: 2px;">🎜🎜Kaedah naik taraf🎜< /span >🎜🎜Jalankan Alat Migrasi untuk mencari vm.$after Lokasi. Jika ada yang kurang, sila rujuk 🎜Mesej ralat Konsol🎜. 🎜🎜


    vm.$remove Alih keluarvm.$remove 移除

    使用 DOM 原生方法:

    rrreee

    升级方式

    运行迁移工具找到vm.$remove。如有遗漏,请参考 控制台错误信息


    底层实例方法



    vm.$eval 移除

    尽量不要使用,如果必须使用该功能并且不肯定如何使用请参考 the forum

    升级方式

    运行迁移工具找到使用 vm.$eval 的位置。如有遗漏请参考 控制台错误信息


    vm.$interpolate 移除

    尽量不要使用,如果必须使用该功能并且不肯定如何使用请参考 the forum

    升级方式

    运行迁移工具找到vm.$interpolate。如有遗漏请参考 控制台错误信息


    vm.$log 移除

    请使用 Vue Devtools 感受最佳 debug 体验。

    升级方式

    运行迁移工具找到 vm.$log

    Gunakan kaedah asli DOM:
    rrreee
    🎜Kaedah naik taraf🎜🎜JalankanAlat Migrasi Cari vm.$remove. Jika ada yang hilang, sila rujuk Mesej ralat Konsol. 🎜🎜🎜🎜🎜

    Kaedah contoh asas


    🎜🎜🎜

    vm.$eval Alih keluar🎜🎜Cuba untuk tidak menggunakannya, jika anda mesti menggunakan fungsi ini dan tidak pasti cara menggunakannya Sila rujuk forum. 🎜

    🎜 Kaedah naik taraf🎜🎜Jalankan Alat Migrasi untuk mencari dan menggunakan vm.$eval. Jika ada yang hilang, sila rujuk Mesej ralat Konsol. 🎜🎜🎜🎜🎜

    vm.$interpolate Alih keluar🎜🎜Cuba untuk tidak menggunakannya, jika anda mesti menggunakan fungsi ini dan tidak pasti cara menggunakannya Sila rujuk forum. 🎜

    🎜 Kaedah naik taraf🎜🎜Jalankan Alat Migrasi untuk mencari vm.$interpolate. Jika ada yang hilang, sila rujuk Mesej ralat Konsol. 🎜🎜🎜🎜🎜

    vm.$log Alih keluar🎜🎜Sila gunakan Vue Devtools Alami pengalaman penyahpepijatan terbaik. 🎜

    🎜 Kaedah naik taraf🎜🎜Jalankan Alat Migrasi untuk mencari vm.$log. Jika ada yang hilang, sila rujuk mesej ralat konsol. 🎜🎜


    Instance DOM pilihan



    replace: false 移除

    现在组件总是会替换掉他们被绑定的元素。为了模仿replace: false的行为,可以用一个和将要替换元素类似的元素将根组件包裹起来:

    rrreee

    或者使用渲染函数:

    rrreee

    升级方式

    运行迁移工具找到 replace: false 使用的位置。


    全局配置



    Vue.config.debug 移除

    不再需要,因为警告信息将默认在堆栈信息里输出。

    升级方式

    运行迁移工具找到包含Vue.config.debug的地方。


    Vue.config.async 移除

    异步操作现在需要渲染性能的支持。

    升级方式

    运行迁移工具找到使用 Vue.config.async 的实例。


    Vue.config.delimiters 替换

    模板选项的方式使用。这样可以在使用自定义分隔符时避免影响第三方模板。

    升级方式

    运行迁移工具找到使用 Vue.config.delimitersreplace: false

    >🎜 Alih keluar🎜🎜🎜🎜🎜Sekarang komponen akan sentiasa menggantikan elemen yang terikat padanya. Untuk meniru gelagat replace: false, anda boleh membalut komponen akar dengan elemen yang serupa dengan elemen yang akan diganti: 🎜rrreee🎜 atau gunakan fungsi rendering: 🎜rrreee
    🎜🎜Kaedah naik taraf🎜🎜🎜🎜JalankanAlat Migrasi Cari lokasi di mana replace: false digunakan. 🎜🎜🎜🎜🎜

    🎜🎜Konfigurasi global🎜🎜🎜🎜🎜🎜🎜

    🎜Vue.config.debug🎜🎜🎜 Alih keluar🎜🎜🎜🎜🎜Tidak diperlukan lagi kerana Maklumat amaran akan dikeluarkan dalam mesej tindanan secara lalai. 🎜

    🎜🎜Kaedah naik taraf 🎜🎜🎜🎜Jalankan Alat Migrasi untuk mencari fail yang mengandungi Vue.config. nyahpepijat tempat. 🎜🎜🎜🎜🎜

    🎜Vue.config.async🎜🎜🎜 Dialih keluar🎜🎜🎜🎜Operasi tak segerak kini memerlukan sokongan prestasi pemaparan. 🎜

    🎜🎜Kaedah naik taraf 🎜🎜🎜🎜Jalankan Alat Migrasi untuk mencari dan menggunakan Vue.config.async contoh. 🎜🎜🎜🎜🎜

    🎜Vue.config.delimiters🎜🎜🎜 Ganti🎜🎜🎜🎜 dengan Gunakan pilihan templat. Ini mengelak daripada menjejaskan templat pihak ketiga apabila menggunakan pemisah tersuai. 🎜

    🎜🎜Kaedah naik taraf 🎜🎜🎜🎜Jalankan Alat Migrasi untuk mencari dan menggunakan Vue.config.delimiters contoh. 🎜🎜


    Vue.config.unsafeDelimiters Alih keluarVue.config.unsafeDelimiters 移除

    HTML 插值替换为 v-html

    升级方式

    运行迁移工具来找到 Vue.config.unsafeDelimiters。然后 helper 工具也会找到 HTML 插入的实例,可以用`v-html`来替换。


    全局 API



    elVue.extend 移除

    el 选项不再在 Vue.extend中使用。仅在实例创建参数中可用。

    升级方式

    更新后运行测试在控制台警告信息中找到关于带有Vue.extendel


    Vue.elementDirective 移除

    用组件来替代

    升级方式

    运行迁移工具找到包含Vue.elementDirective

    Interpolasi HTML dengan v-html.
    🎜 Kaedah naik taraf🎜🎜Jalankan Alat Migrasi untuk mencari Vue.config.unsafeDelimiters. Kemudian alat pembantu juga akan mencari contoh sisipan HTML, yang boleh digantikan dengan `v-html`. 🎜🎜🎜🎜🎜

    API Global


    🎜 🎜🎜

    Vue.extend dengan el Alih keluar Pilihan 🎜🎜🎜el tidak lagi digunakan dalam Vue.extend. Tersedia hanya dalam parameter penciptaan contoh. 🎜

    🎜 Kaedah naik taraf🎜🎜Jalankan ujian selepas kemas kini Cari dalam Mesej amaran Konsol tentang el dengan Vue.extend kod>. 🎜🎜🎜🎜🎜

    Vue.elementDirective< span style="font-size: 18px;"> Alih keluar🎜🎜Ganti dengan komponen🎜

    🎜Kaedah naik taraf🎜🎜 Jalankan Alat Migrasi untuk mencari tika yang mengandungi Vue.elementDirective. 🎜🎜


    Vue.partial Dialih keluarVue.partial 移除

    Partials 已被移除,取而代之的是更明确的组件之间的数据流–props。除非你正在使用一个部分性能关键型区域,否则建议只使用一个 normal component 来代替。如果你是动态绑定部分的 name,您可以使用 dynamic component

    如果你碰巧在你的应用程序的性能关键部分使用 partials,那么你应该升级到函数式组件。它们必须在纯 JS / JSX 文件中 (而不是在 .vue 文件中),并且是无状态的和无实例的,就像 partials。这使得渲染极快。

    函数式组件相对于 partials 一个好处是它们可以更具动态性,因为它们允许您访问 JavaScript 的全部功能。然而,这是有成本的。如果你从来没有使用过渲染式的组件框架,你可能需要花费更长的时间来学习它们。

    升级方式

    运行迁移工具找到包含 Vue.partial

    Sebahagian telah dialih keluar dan digantikan dengan aliran data yang lebih jelas antara komponen – prop. Melainkan anda menggunakan kawasan yang separa kritikal prestasi, adalah disyorkan untuk menggunakan komponen biasa sahaja. Jika anda mengikat bahagian name secara dinamik, anda boleh menggunakan komponen dinamik.

    Jika anda kebetulan menggunakan separa dalam bahagian kritikal prestasi aplikasi anda, maka anda harus meningkatkan kepada Komponen berfungsi. Ia mestilah dalam fail JS/JSX tulen (bukan dalam fail .vue) dan tidak berstatus dan tidak berwujud, sama seperti separa. Ini menjadikan pemaparan amat pantas.

    Satu faedah komponen berfungsi berbanding separa ialah ia boleh menjadi lebih dinamik kerana ia membolehkan anda mengakses kuasa penuh JavaScript. Walau bagaimanapun, ini memerlukan kos. Jika anda tidak pernah menggunakan rangka kerja komponen yang diberikan, anda mungkin mengambil masa yang lebih lama untuk mempelajarinya.

    Kaedah naik taraf🎜🎜Jalankan Alat Migrasi untuk mencari < kod >Instance Vue.partial
    🎜🎜🎜🎜🎜🎜 🎜