搜尋
首頁web前端js教程超全面的vue.js使用總結

Vue.js是當下很火的一個JavaScript MVVM函式庫,它是以資料驅動和元件化的想法建構的。相較於Angular.js,Vue.js提供了更簡潔、更易於理解的API,使得我們能夠快速地上手並使用Vue.js。以下這篇文章主要給大家介紹了關於vue.js使用的相關總結,需要的朋友可以參考借鑒。

一、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可以排錯

二、指令keep-alive

在看demo的時候看到在vue-router寫著keep-alive,keep-alive-alive的意義:

如果把切換出去的元件保留在記憶體中,可以保留它的狀態或避免重新渲染。為此可以加入一個keep-alive指令

<component></component>

三、如何讓css只在當前元件中起作用

在每一個vue元件中都可以定義各自的css,js,如果希望元件內寫的css只對目前組件起作用,只需要在style中寫入scoped,即:

<style></style>

四、vuejs循環插入圖片

在寫循環的時候,寫入如下代碼:

<p> 
 <img  src="/static/imghwm/default1.png" data-src="{{item.image}}" class="lazy" alt="超全面的vue.js使用總結" >
</p>

此時在控制台會出現警告
[Vue Warn]: src="{{item.image}}": interpolation in "src" attribute will cause a 404 request. Use v-bind:src instead.這裡意思是在「src」屬性插值將導致404請求。使用v-bind:src代替。

所以替換成如下:

<p> 
 <img  src="/static/imghwm/default1.png" data-src="item.image" class="lazy" alt="超全面的vue.js使用總結" >
</p>

這裡需要主要,v-bind在寫的時候不能再用{{}},根據官方的說法:

<a></a>

這裡href 是參數,它告訴v-bind 指令將元素的href 特性跟表達式url 的值綁定。可能你已註意到可以用特性插值href="{{url}}" rel="external nofollow" 得到相同的結果:這樣沒錯,並且實際上在內部特性插值會轉為 v-bind 綁定。

五、綁定value到Vue實例的一個動態屬性上

對於單選按鈕,勾選框及選擇框選項,v-model綁定的value通常是靜態字串(對於勾選框是邏輯值):

<!-- `toggle` 为 true 或 false -->
<input>

但是有時候想綁定value到vue實例的一個動態屬性上,這時可以用v-bind實現,而這個屬性的值可以不是字串。例如綁定Checkbox的value到vue實例的一個動態屬性:

<input>
<p>{{toggle}}</p>

這裡綁定後,並不是說就可以點擊後由true,false的切換變成a,b的切換,因為這裡定義的動態a, b是scope上的a,b,並不能直接顯示出來,此時

//当选中时
vm.toggle === vm.a
//当没选中时
vm.toggle === vm.b

所以此時需要在data中定義a,b,即:

new Vue({
 el:'...',
 data:{
 a:'a',
 b:'b' 
 }
});

六、片段實例

下面幾種情況會讓實例變成一個片段實例:

  1. 模板包含多個頂層元素。

  2. 範本只包含普通文字。

  3. 模板只包含其它組件(其它組件可能是一個片段實例)。

  4. 範本只包含一個元素指令,如 或 vue-router 的

  5. 模板根節點有一個流程控制指令,如 v-if 或 v-for。

這些情況讓實例有未知數量的頂級元素,它將把它的 DOM 內容當作片段。片段實例仍然會正確地渲染內容。不過,它沒有一個根節點,它的$el 指向一個錨點節點,即一個空的文字節點(在開發模式下是一個註解節點)。

但是更重要的是,組件元素上的非流程控制指令,非prop 特性和過渡將被忽略,因為沒有根元素供綁定:

<!-- 不可以,因为没有根元素 -->
<example></example>
 
<!-- props 可以 -->
<example></example>
 
<!-- 流程控制可以,但是不能有过渡 -->
<example></example>

片段實例也有用處,但是通常情況下組件有一個根節點比較好,它會保證元件元素上的指令和特性能正確的轉換,同時效能也稍微好一點。

七、路由嵌套

路由嵌套會將其他元件渲染到該元件內,而不是進行整個頁面跳轉router-view本身就是將元件渲染到該位置,想要進行頁面跳轉,就要將頁面渲染到根元件,在起始設定路由時候寫到:

var App = Vue.extend({ root });
router.start(App,'#app');

這裡首先將根元件註冊進來,用於將路由中配置好的各個頁面渲染出來,然後將根元件掛載到與# app匹配的元素上。

八、實作多個根據不同條件顯示不同文字的方法

v-if,v-else可以實現條件選擇,但是如果是多個連續的條件選擇,則需要用到計算屬性computed。例如實現當輸入框中什麼都沒寫的時候顯示字串'empty',否則顯示輸入框中的內容,代碼如下:

<p>
 <input>
 </p><h1 id="changeVaule">{{changeVaule}}</h1>

new Vue({
 el:'#test',
 data:{
 changeVaule:'123'
 },
 computed :{
 changeVaule:function(){
  if(this.inputValue!==''){
  return this.inputValue;
  }else{
  return 'empty';
  }
 }
 }
});

九、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>{{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>hello</span>
<span>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
JavaScript數據類型:瀏覽器和nodejs之間是否有區別?JavaScript數據類型:瀏覽器和nodejs之間是否有區別?May 14, 2025 am 12:15 AM

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScript評論:使用//和 / * * / * / * /JavaScript評論:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:開發人員的比較分析Python vs. JavaScript:開發人員的比較分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

Python vs. JavaScript:選擇合適的工具Python vs. JavaScript:選擇合適的工具May 08, 2025 am 12:10 AM

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript:了解每個的優勢Python和JavaScript:了解每個的優勢May 06, 2025 am 12:15 AM

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

JavaScript的核心:它是在C還是C上構建的?JavaScript的核心:它是在C還是C上構建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript應用程序:從前端到後端JavaScript應用程序:從前端到後端May 04, 2025 am 12:12 AM

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中