ホームページ ウェブフロントエンド jsチュートリアル vue.js の使い方の超包括的なまとめ

vue.js の使い方の超包括的なまとめ

Mar 22, 2017 pm 01:30 PM

Vue.js は、現在非常に人気のある JavaScript MVVM ライブラリであり、データ駆動型およびコンポーネントベースのアイデアで構築されています。 Angular.js と比較して、Vue.js はよりシンプルで理解しやすい API を提供するため、すぐに Vue.js を使い始めて使用することができます。次の記事では、vue.js の使用に関する関連した概要を主に紹介します。必要な友人は参照してください。

1. Vue.js コンポーネント

vue.js ビルド コンポーネント 使用

Vue.component('componentName',{ /*component*/ });
ログイン後にコピー

ここで、コンポーネントは最初に登録してから使用する必要があることに注意してください。つまり、

Vue.component('mine',{
  template:'#mineTpl',
  props:['name','title','city','content']
 });

 var v=new Vue({
 el:'#vueInstance',
 data:{
  name:'zhang',
  title:'this is title',
  city:'Beijing',
  content:'these are some desc about Blog'
 }
});
ログイン後にコピー

逆の場合は、逆の場合は、コンポーネントが最初に使用されることを意味するため、エラーが報告されます。コンポーネントはインストールされていますが、コンポーネントは登録されていません。

webpack がエラーを報告した後、webpack --display-error-details を使用してエラーをトラブルシューティングします

2. コマンド keep-alive

デモを見ていると、keep-alive と keep-alive という言葉が書かれているのが見えました。 vue-router. 意味:

切り替えられたコンポーネントをメモリ内に保持すると、その状態を保存したり、再レンダリングを回避したりできます。この目的のために、キープアライブ命令を追加できます

<component :is=&#39;curremtView&#39; keep-alive></component>
ログイン後にコピー

3. CSS を現在のコンポーネントでのみ機能させる方法

CSS を記述したい場合は、各 vue コンポーネントで独自の CSS と JS を定義できます。現在のコンポーネントで作業するには、スタイルでスコープを指定するだけで済みます。

<style scoped></style>
ログイン後にコピー

4. vuejs ループに画像を挿入します

ループを記述するときは、次のコードを記述します。

<p class="bio-slide" v-for="item in items"> 
 <img src="{{item.image}}">
</p>
ログイン後にコピー

この時点でコンソールに表示されます。警告
[Vue Warn]: src="{{item.image}}": "src" 属性の補間により 404 リクエストが発生します。代わりに v-bind:src を使用してください。これは、「src」属性の補間により 404 リクエストが発生することを意味します。代わりに v-bind:src を使用してください。

次のように置き換えます:

<p class="bio-slide" v-for="item in items"> 
 <img v-bind:src="item.image">
</p>
ログイン後にコピー

ここがキーです。公式の声明によると、v-bind は {{}} を使用できなくなります:

<a v-bind:href="url" rel="external nofollow" ></a>
ログイン後にコピー

ここでの href はパラメーターであり、v に指示します。 -bind 命令は、要素の href 属性を式 URL の値にバインドします。特徴補間 href="{{url}}" rel="external nofollow" を使用しても同じ結果が得られることに気づいたかもしれません。これは正しく、内部的に特徴補間は実際に v-bind バインディングに変換されます。

5. Vue インスタンスの動的属性に値をバインドする

ラジオ ボタン、チェック ボックス、および選択ボックスのオプションの場合、v-model にバインドされる値は通常、静的な文字列です (チェック ボックスの場合は論理文字列値です) ):

<!-- `toggle` 为 true 或 false -->
<input type="checkbox" v-model="toggle">
ログイン後にコピー

ただし、値を vue インスタンスの動的属性にバインドしたい場合もあります。この場合、v-bind を使用できます。この属性の値は文字列である必要はありません。たとえば、Checkbox の値を vue インスタンスの動的属性にバインドします。

<input 
 type="checkbox"
 v-model="toggle"
 v-bind:true-value="a"
 v-bind:false-value="b">
<p>{{toggle}}</p>
ログイン後にコピー

ここでバインドした後、クリック後に true と false から a と b に切り替えられるわけではありません。なぜなら、ここで定義されている動的 a は、 b はスコープ上の a, b であり、

//当选中时
vm.toggle === vm.a
//当没选中时
vm.toggle === vm.b
ログイン後にコピー

なので直接表示できないので、この時点でデータ内で a, b を定義する必要があります。つまり、

new Vue({
 el:'...',
 data:{
 a:'a',
 b:'b' 
 }
});
ログイン後にコピー

6. フラグメントインスタンス

次の状況では、インスタンスがフラグメント インスタンスになります:

  1. テンプレートには複数のトップレベル要素が含まれています。

  2. テンプレートには通常のテキストのみが含まれています。

  3. テンプレートには他のコンポーネントのみが含まれます (他のコンポーネントはフラグメント インスタンスである可能性があります)。

  4. テンプレートには、 や vue-router の などの要素ディレクティブが 1 つだけ含まれています。

  5. テンプレートのルートノードには、v-if や v-for などのフロー制御ディレクティブがあります。

インスタンスに未知の数のトップレベル要素がある場合、その DOM コンテンツはフラグメントとして扱われます。フラグメント インスタンスは引き続きコンテンツを正しくレンダリングします。ただし、ルート ノードはなく、その $el は空のテキスト ノード (開発モードではコメント ノード) であるアンカー ノードを指します。

しかし、より重要なのは、バインドするルート要素がないため、コンポーネント要素の非フロー制御ディレクティブ、非プロパティ属性、トランジションは無視されることです:

<!-- 不可以,因为没有根元素 -->
<example v-show="ok" transition="fade"></example>
 
<!-- props 可以 -->
<example :prop="someData"></example>
 
<!-- 流程控制可以,但是不能有过渡 -->
<example v-if="ok"></example>
ログイン後にコピー

Fragment インスタンスも便利ですが、通常、コンポーネントには 1 つのインスタンスがあります。ルート ノードの方が優れており、コンポーネント要素の命令とプロパティが確実に正しく変換され、パフォーマンスがわずかに向上します。

7. ルートのネスト

ルートのネストでは、ページ全体をジャンプするのではなく、コンポーネントをその位置にレンダリングします。ページをレンダリングするだけです。ルートを構成するときに、ルート コンポーネントに次のように記述します。

var App = Vue.extend({ root });
router.start(App,'#app');
ログイン後にコピー

ここでは、まずルート コンポーネントを登録してルートに構成された各ページをレンダリングし、次に # app が要素に一致するようにルート コンポーネントをマウントします。

8. 条件に応じて異なるテキストを表示するメソッドを複数実装する

v-if、v-elseで条件選択を実現できますが、複数連続の条件選択の場合は計算された属性を使用する必要があります。たとえば、入力ボックスに何も書き込まれていない場合は「empty」という文字列が表示され、それ以外の場合は入力ボックスの内容が表示されます。

<p id="test">
 <input type="text" v-model="inputValue">
 <h1>{{changeVaule}}</h1>
</p>
new Vue({
 el:'#test',
 data:{
 changeVaule:'123'
 },
 computed :{
 changeVaule:function(){
  if(this.inputValue!==''){
  return this.inputValue;
  }else{
  return 'empty';
  }
 }
 }
});
ログイン後にコピー

9. Vuejs の変更検出の問題

1.配列

JavaScript の制限により、vuejs は配列に対する次の変更を検出できません:

vm.item[0]={} などの設定要素を直接インデックス化する

データの長さを変更するvm.item.length。

問題 1 を解決するために、Vuejs は観測配列を拡張し、それに $set() メソッドを追加します。

// 与 `example1.items[0] = ...` 相同,但是能触发视图更新
example1.items.$set(0, { childMsg: 'Changed!'})
ログイン後にコピー

问题2,需要一个空数组替换items。

除了$set() ,vuejs也为观察数组添加了$remove()方法,用于从目标数组中查找并删除元素,在内部调用了splice() 。

因此,不必:

var index = this.items.indexOf(item)
if (index !== -1) {
 this.items.splice(index, 1)
}
ログイン後にコピー

只需:

this.items.$remove(item);
ログイン後にコピー

2.检测对象

受ES5的显示,Vuejs不能检测到对象属性的添加或删除。因为Vuejs在初始化时候将属性转化为getter/setter,所以属性必须在data对象才能让Vuejs转换它,才能让它是响应的,例如:

var data = { a: 1 }
var vm = new Vue({
 data: data
})
// `vm.a` 和 `data.a` 现在是响应的
 
vm.b = 2
// `vm.b` 不是响应的
 
data.b = 2
// `data.b` 不是响应的
ログイン後にコピー

不过,有办法在实例创建之后添加属性并且让它是响应的。对于Vue实例,可以使用$set(key,value)实例方法:

vm.$set('b', 2)
// `vm.b` 和 `data.b` 现在是响应的
ログイン後にコピー

对于普通数据对象,可以使用全局方法Vue.set(object, key, value) :

Vue.set(data, 'c', 3)
// `vm.c` 和 `data.c` 现在是响应的
ログイン後にコピー

有时你想向已有对象上添加一些属性,例如使用 Object.assign() 或 _.extend() 添加属性。但是,添加到对象上的新属性不会触发更新。这时可以创建一个新的对象,包含原对象的属性和新的属性:

// 不使用 `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })
ログイン後にコピー

十、关于vuejs页面闪烁{{message}}

在vuejs指令中有v-cloak,这个指令保持在元素上直到关联实例结束编译。和CSS规则如[v-cloak]{display:none}一起用时,这个指令可以隐藏未编译的Mustache标签直到实例准备完毕。

用法如下:

[v-cloak]{
 display:none;
}
<p v-cloak>{{message}}</p>
ログイン後にコピー

这样

不会显示,直到编译结束

十一、关于在v-for循环时候v-model的使用

有时候需要循环生成input,用v-model绑定后,利用vuejs操作它,此时我们可以在v-model中写一个数组selected[$index] ,这样就可以给不同的input绑定不同的v-model,从而分别操作他们。这个我在demo中的dataBind.vue中用到。

十二、vuejs中过渡动画

在vuejs中,css定义动画:

 .zoom-transition{
  width:60%;
  height:auto;
  position: absolute;
  left:50%;
  top:50%;
  transform: translate(-50%,-50%);
  -webkit-transition: all .3s ease;
  transition: all .3s ease;
 }
 .zoom-enter, .zoom-leave{
  width:150px;
  height:auto;
  position: absolute;
  left:20px;
  top:20px;
  transform: translate(0,0);
 }
ログイン後にコピー

其中动画在定的时候要注意上下对应,上面有什么,下面有什么,都要变化的,如果有不变化的,应该抽离出去,作为公共css样式,在上面的css中,如果我只写 transform: translate(-50%,-50%);而不写下面的transform: translate(0,0);则会导致上面的transform: translate(-50%,-50%);被添加到下面,认为这个是不变的。

十三、指令v-el的使用

有时候我们想就像使用jquery那样去访问一个元素,此时就可以使用v-el指令,去给这个元素注册一个索引,方便通过所属实例的$el访问这个元素。

注意

HTML不区分大小写,所以v-el:someEl将转换为全小写。可以用v-el:some-el然后设置this.$el.someEl。

示例

<span v-el:msg>hello</span>
<span v-el:other-msg>world</span>
this.$els.msg.textContent // -> "hello"
this.$els.otherMsg.textContent // -> "world"
this.$els.msg //-><span>hello</span>
ログイン後にコピー

十四、关于vuejs中使用事件名

在vuejs中,我们经常要绑定一些事件,有时候给DOM元素绑定,有时候给组件绑定。绑定事件在HTML中用v-on:click-"event" ,这时evet的名字不要出现大写,因为在1.x中不区分大小写,所以如果我们在HTML写v-on:click="myEvent"而在js中写myEvent就出错误,所以在vuejs的1.x绑定事件时候,要尽量避免使用大写字母。在2.0中没有该限制!

十五、v-if与v-show的区别

v-if直接不渲染这个DOM元素,而v-show是会渲染DOM元素,只是使用display:none隐藏,打开开发者工具可以看到该DOM

十六、关于transition全局钩子如何在组件中使用

Vue.transition是定义一个全局transition钩子的,如果想针对组件定义,则需要如下写法:

export default{
 transition:{
  'fade':{
   enter() {},
   leave() {}
  }
 }
}
ログイン後にコピー

这样fade这个过度钩子只会作用于组件内,如果同时有同名的全局钩子,则会优先使用组建定义的

十七、利用vue-router如何实现组件在渲染出来前执行某个事件

export default{
 data(){
  return{
   selected:0,
   currentView:'view_0'
  }
 },
 methods:{
  choose(index) {
   this.selected=index;
   this.currentView='view_'+index;
  }
 },
 route:{
  data() {
   /*每次切换路由,在渲染出页面前都会执行*/
  }
 }
}
ログイン後にコピー

更多超全面的vue.js使用总结相关文章请关注PHP中文网!

相关文章:

通过纯Vue.js构建Bootstrap组件

强大Vue.js组件详细说明

Vue.js环境搭建教程介绍

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? 独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? Mar 18, 2025 pm 03:14 PM

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか? ブラウザ開発者ツールを使用してJavaScriptコードを効果的にデバッグするにはどうすればよいですか? Mar 18, 2025 pm 03:16 PM

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

ソースマップを使用して、マイナイドJavaScriptコードをデバッグするにはどうすればよいですか? ソースマップを使用して、マイナイドJavaScriptコードをデバッグするにはどうすればよいですか? Mar 18, 2025 pm 03:17 PM

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Apr 04, 2025 pm 05:12 PM

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

初心者向けのタイプスクリプト、パート2:基本データ型 初心者向けのタイプスクリプト、パート2:基本データ型 Mar 19, 2025 am 09:10 AM

エントリーレベルのタイプスクリプトチュートリアルをマスターしたら、TypeScriptをサポートするIDEで独自のコードを作成し、JavaScriptにコンパイルできるはずです。このチュートリアルは、TypeScriptのさまざまなデータ型に飛び込みます。 JavaScriptには、NULL、未定義、ブール値、数字、文字列、シンボル(ES6によって導入)とオブジェクトの7つのデータ型があります。 TypeScriptはこれに基づいてより多くのタイプを定義し、このチュートリアルではすべてを詳細に説明します。 ヌルデータ型 JavaScriptのように、Typescriptのnull

See all articles