検索

Vue の重要な知識ポイント

Feb 11, 2018 am 11:14 AM
知識のポイント

この記事では主に Vue の重要な知識ポイントをいくつか紹介し、皆様のお役に立てれば幸いです。

オプションのプロパティやコールバックではアロー関数を使用しないでください

たとえば、

  • created: () => console.log(this.a)

  • vm.$watch('a', newValue => ; this.myMethod())
    アロー関数は親コンテキストにバインドされているため、this は期待どおりの Vue インスタンスにはなりません。 Uncaught TypeError: Cannot read property of unknown または Uncaught TypeError: this.myMethod is not a functionthis 不会是如你所预期的 Vue 实例,经常导致 Uncaught TypeError: Cannot read property of undefined 或 Uncaught TypeError: this.myMethod is not a function 之类的错误

具体见:这里

v-html

双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 指令:

<p>Using mustaches: {{ rawHtml }}</p><p>Using v-html directive: <span></span></p>

具体见:这里

计算属性缓存 vs 方法

我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的依赖进行缓存的。计算属性只有在它的相关依赖发生改变时才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 reversedMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。
这个 计算属性是基于它们的依赖进行缓存的 是什么意思呢?

computed: {  now: function () {    return Date.now()
  }
}

这里虽然Date.now()的值一直在变,但是他没有被watch,因为他不是响应式依赖。

具体见:这里

CSS样式自动添加前缀

v-bind:style 使用需要添加浏览器引擎前缀的 CSS 属性时,如 transform,Vue.js 会自动侦测并添加相应的前缀。

具体见: 这里

<template></template> 元素上使用 v-if 条件渲染分组

因为 v-if 是一个指令,所以必须将它添加到一个元素上。但是如果想切换多个元素呢?此时可以把一个  元素当做不可见的包裹元素,并在上面使用 v-if。最终的渲染结果将不包含 <template></template> 元素。

<template>  <h1 id="Title">Title</h1>  <p>Paragraph 1</p>  <p>Paragraph 2</p></template>

具体见:这里

v-ifv-showv-for

  • v-if 是对页面元素的添加和移除操作

  • v-show 是对页面元素的显示和隐藏操作

  • 当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级。

具体见:这里

数组更改检测注意事项

Vue 不能检测一下方式变动的数组,从而将不会触发视图更新

  • 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue

  • 当你修改数组的长度时,例如:vm.items.length = newLength

具体见:这里

对象更改检测注意事项

Vue 不能检测对象属性的添加或删除

var vm = new Vue({
  data: {
    a: 1
  }
})// `vm.a` 现在是响应式的vm.b = 2// `vm.b` 不是响应式的

但是我们可以通过 Vue.set(object, key, value)方法向嵌套对象添加响应式属性。
另外还有这个常用的方法 Object.assign(),当我们想要为某个对象赋予 多个新属性 的时候,你应该这么玩

this.userProfile = Object.assign({}, this.userProfile, {
  age: 27,
  favoriteColor: 'Vue Green'})

具体见: 这里

v-for 中使用 methods 方法


  • {{ n }}
  • 具体见: 这里

    组件使用 v-for

    在自定义组件里,你可以像任何普通元素一样用 v-for

    <my-component></my-component>

    具体见: 这里

    .once 事件修饰符(2.1.4 新增)

    <!-- 点击事件将只会触发一次 --><a></a>

    .once 也可以使用在 自定义组件 上。

    具体见:这里

    is 特性

    由于dom某些元素本身的一些限制,<ul></ul><ol></ol><table>、<code><select></select> 这样的元素里允许包含的元素有限制。

    <div>  <table>    <money></money>  </table>
    </div>Vue.component('txt',{
       template: '<div>I like money!</div>'})new Vue({
      el:'#app'})

    将会解析成下面的dom

    <div>
      <div>I like money!</div>
      <table></table>
    </div>

    如果想要解析正确,需要使用 is

    詳細については、こちらを参照してください

    v-html

    二重中括弧は、データを HTML コードではなく通常のテキストとして解釈します。実際の HTML を出力するには、v-html ディレクティブを使用する必要があります:

    <div>
      <table>
        <tr></tr>
      </table>
    </div>
    こちらを参照🎜

    計算された属性キャッシュとメソッド

    🎜同じ関数を、計算されたプロパティの代わりにメソッドとして定義できます。最終結果はどちらの方法でもまったく同じになります。ただし、計算されたプロパティが依存関係に基づいてキャッシュされるという点が異なります。計算されたプロパティは、関連する依存関係が変更された場合にのみ再評価されます。つまり、メッセージが変更されていない限り、 reversedMessage 計算プロパティに複数回アクセスすると、関数を再度実行することなく、直前の計算結果が即座に返されます。 🎜これは、計算されたプロパティが依存関係に基づいてキャッシュされることを意味しますか? 🎜
    <div>
      <table>
         <tbody>
            <div>I like money!</div>
         </tbody>
      </table>
    </div>
    🎜🎜Date.now() の値は変化し続けますが、それは watch ではないためです。は応答性の依存関係ではありません。 🎜🎜参照: こちら🎜

    CSS スタイルはプレフィックスを自動的に追加します

    🎜v-bind:style が、ブラウザ エンジンによってプレフィックスを付ける必要がある CSS 属性 ( など) を使用する場合 を変換すると、Vue.js が対応するプレフィックスを自動的に検出して追加します。 🎜🎜参照: こちら🎜

    <template></template> 要素で v-if 条件付きレンダリング グループ化を使用します

    🎜 v-if はディレクティブであるため、ディレクティブに追加する必要があります要素。しかし、複数の要素を切り替えたい場合はどうすればよいでしょうか?このとき、要素を非表示のラッピング要素として扱い、それに v-if を使用できます。最終的なレンダリングには、<template></template> 要素は含まれません。 🎜
    todo: {
      text: 'Learn Vue',
      isComplete: false}
    🎜🎜 詳細については、こちらを参照してください🎜

    v-ifv-show および v-for

    🎜🎜🎜v-if はページ要素の追加と削除の操作です🎜🎜🎜🎜v-show はページ要素の表示と非表示の操作です🎜🎜🎜🎜when v - if および v-for と併用した場合、v-for は v-if よりも優先されます。 🎜🎜🎜詳細については、こちらを参照してください🎜

    配列変更検出に関する考慮事項

    🎜Vue はモードが変更された配列を検出できないため、ビューの更新はトリガーされません🎜🎜🎜🎜インデックスを直接使用します。 項目を設定する場合、たとえば: vm.items[indexOfItem] = newValue🎜🎜🎜🎜 配列の長さを変更する場合、たとえば: vm.items。 length = newLength 🎜🎜🎜詳細については、こちらを参照してください🎜

    オブジェクト変更検出に関する考慮事項

    🎜Vue はオブジェクト属性の追加または削除を検出できません🎜
    <todo-item></todo-item>
    🎜 🎜しかし、Vue.set(object, key, value) メソッドを通じて、ネストされたオブジェクトに応答性の高いプロパティを追加できます。 🎜一般的に使用されるメソッド Object.assign() もあります。オブジェクトに 🎜複数の新しい属性🎜を割り当てたい場合は、次のように行う必要があります🎜
    <todo-item></todo-item>
    🎜🎜 詳細については、こちらを参照してください🎜

    v-formethods メソッドを使用します

    // 父组件<child></child>new Vue({  data () {    return {
           parentMsg: '来自父组件的数据'
        }
      }
    })// 子组件Vue.component('child', {  // 在 JavaScript 中使用 camelCase
      props: ['myMessage'],
      template: '<span>{{ myMessage }}</span>'})
    🎜🎜詳しくはこちらをご覧ください🎜

    コンポーネントは v-for

    を使用します🎜 カスタム コンポーネントでは、v-for を使用できますコード>。 🎜<div class="highlight highlight-source-js"> <pre class="brush:php;toolbar:false">&lt;span&gt;来自父组件的数据&lt;/span&gt;</pre>🎜🎜 詳細については、こちらを参照してください🎜<h2> <code>.once イベント修飾子 (2.1.4 の新機能)
    // 父组件<!-- 在 HTML 中使用 kebab-case --><child></child>
    
    子组件获得的是: 字符串 'hello!'
    🎜🎜.once は、🎜カスタム コンポーネント🎜 でも使用できます。 🎜🎜詳細については、こちらを参照してください🎜

    is の機能

    🎜一部の DOM 要素自体の制限により、<ul></ul><ol></ol><table>、<code><select></select> このような要素で許可される要素には制限があります。 🎜
    <comp></comp>
    🎜🎜 は次の dom に解析されます🎜🎜
    <comp> bar = val"></comp>
    🎜🎜 正しく解析したい場合は、is を使用する必要があります。属性。 🎜🎜
    this.$emit('update:foo', newValue)
    🎜🎜このようにして、dom は正しく解析されます。 🎜🎜りー🎜

    具体见:这里

    将对象的所有属性作为 prop 进行传递

    如果你想把一个对象的所有属性作为 prop 进行传递,可以使用不带任何参数的 v-bind (即用 v-bind 而不是 v-bind:prop-name)。例如,已知一个 todo 对象:

    todo: {
      text: 'Learn Vue',
      isComplete: false}

    然后:

    <todo-item></todo-item>

    将等价于:

    <todo-item></todo-item>

    具体见: 这里

    非 Prop 特性的替换与合并

    • classstyle这两个特性的值都会做合并 (merge) 操作

    • 其他属性(如: type) 则会进行覆盖

    具体见: 这里

    Props的一般绑定和动态绑定

    我们常用的一般是动态绑定:

    // 父组件<child></child>new Vue({  data () {    return {
           parentMsg: '来自父组件的数据'
        }
      }
    })// 子组件Vue.component('child', {  // 在 JavaScript 中使用 camelCase
      props: ['myMessage'],
      template: '<span>{{ myMessage }}</span>'})

    显示:

    <span>来自父组件的数据</span>

    一般绑定:

    // 父组件<!-- 在 HTML 中使用 kebab-case --><child></child>
    
    子组件获得的是: 字符串 'hello!'

    具体见:这里

    .sync 修饰符(2.3.0+新增)

    之前在 2.0 版本中移除后,在 2.3.0 中又加上了,只是调用的逻辑发生了变化,变成了一种语法糖。
    如下代码:

    <comp></comp>

    会被扩展为:

    <comp> bar = val"></comp>

    当子组件需要更新 foo 的值时,它需要显式地触发一个更新事件:

    this.$emit('update:foo', newValue)

    有点类似与 v-model

    具体见:这里

    自定义组件的 v-model(2.2.0 新增)

    默认情况下,一个组件的 v-model 会使用 value propinput 事件。这也是之前 v-model 默认绑定的元素 和 事件方法。

    但是到 2.2.0 时候,我们可以通过 model 配置这个两个属性。

    Vue.component('my-checkbox', {
      model: {
        prop: 'checked',    event: 'change'
      },
      props: {
        checked: Boolean,    // 这样就允许拿 `value` 这个 prop 做其它事了
        value: String
      },  // ...})
    <my-checkbox></my-checkbox>

    上述代码等价于:

    <my-checkbox> { foo = val }"
      value="some value"></my-checkbox>

    具体见:这里

    插槽内容分发

    我们不总能遇见我们的组件中包含了哪些元素,这时候我们在开发组件的时候,需要让这部分内容自定义。
    假定 my-component 组件有如下模板:

    <div>
      <h2 id="我是子组件的标题">我是子组件的标题</h2>
      <slot>
        只有在没有要分发的内容时才会显示。
      </slot>
    </div>

    父组件模板:

    <div>
      <h1 id="我是父组件的标题">我是父组件的标题</h1>
      <my-component>
        <p>这是一些初始内容</p>
        <p>这是更多的初始内容</p>
      </my-component>
    </div>

    渲染结果:

    <div>
      <h1 id="我是父组件的标题">我是父组件的标题</h1>
      <div>
        <h2 id="我是子组件的标题">我是子组件的标题</h2>
        <p>这是一些初始内容</p>
        <p>这是更多的初始内容</p>
      </div>
    </div>

    当然还有 具名插槽 、作用域插槽(2.1.0 新增)、slot-scope(2.5.0新增)

    具体见:这里

    动态组件

    通过使用保留的 <component></component> 元素,并对其 is 特性进行动态绑定,你可以在同一个挂载点动态切换多个组件:

    var vm = new Vue({
      el: '#example',
      data: {
        currentView: 'home'
      },
      components: {
        home: { /* ... */ },
        posts: { /* ... */ },
        archive: { /* ... */ }
      }
    })
    <component>  <!-- 组件在 vm.currentview 变化时改变! --></component>

    注意这里的 is 与 之前说的 v-bind:is 别混淆

    具体见:这里

    对低开销的静态组件使用 v-once

    尽管在 Vue 中渲染 HTML 很快,不过当组件中包含大量静态内容时,可以考虑使用 v-once 将渲染结果缓存起来,就像这样:

    Vue.component('terms-of-service', {
      template: '\    <div>\      <h1 id="Terms-of-Service">Terms of Service</h1>\      ...很多静态内容...\    </div>\  '})

    具体见:这里

    混合(mixins)的合并策略

    周期钩子的合并策略

    • 同名钩子函数将混合为一个数组,因此都将被调用

    • 混合对象的钩子将在组件自身钩子 之前 调用

    var mixin = {  created: function () {    console.log('混合对象的钩子被调用')
      }
    }new Vue({
      mixins: [mixin],  created: function () {    console.log('组件钩子被调用')
      }
    })// => "混合对象的钩子被调用"// => "组件钩子被调用"

    methods, components 和 directives 的合并策略

    • 两个对象键名冲突时,取组件对象的键值对

    var mixin = {
      methods: {    foo: function () {      console.log('foo')
        },    conflicting: function () {      console.log('from mixin')
        }
      }
    }var vm = new Vue({
      mixins: [mixin],
      methods: {    bar: function () {      console.log('bar')
        },    conflicting: function () {      console.log('from self')
        }
      }
    })vm.foo() // => "foo"vm.bar() // => "bar"vm.conflicting() // => "from self"

    以上がVue の重要な知識ポイントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

    JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

    Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

    Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

    Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

    PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

    C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

    C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

    JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

    さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

    ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

    現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

    next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

    私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

    next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

    この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強力な PHP 統合開発環境

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    EditPlus 中国語クラック版

    EditPlus 中国語クラック版

    サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

    Safe Exam Browser

    Safe Exam Browser

    Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール