當前位置:首頁 » 網頁前端 » 前端加油站vue指令
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

前端加油站vue指令

發布時間: 2022-09-19 13:22:58

A. Vue.js提供了哪些內置指令,至少寫出五個。

5.1 基本指令
5.1.1 v-­cloak一般與display:none進行結合使用
作用:解決初始化慢導致頁面閃動的最佳實踐
5.1.2 v­-once
定義它的元素和組件只渲染一次
5.2 條件渲染指令
5.2.1 v­-if, v-­eles-­if ,v­-else
用法: 必須跟著屁股走
v-if後面的等號必須是布爾值
v-if的弊端 :
Vue 在渲染元素時 ,出於效率考慮,會盡可能地復用已有的元素而非重新渲染, 因此會出現烏龍
只會渲染變化的元素,也就是說,input元素被復用了

B. vue前端面試題有哪些呢

文章中給你列舉了部分的面試題,這些都是公司面試常遇到的,還有需要的還可以自己去查閱一下資料
1、active-class是哪個組件的屬性?嵌套路由怎麼定義?
答:vue-router模塊的router-link組件。
2、怎麼定義vue-router的動態路由?怎麼獲取傳過來的動態參數?
答:在router目錄下的index.js文件中,對path屬性加上/:id。 使用router對象的params.id
3、vue-router有哪幾種導航鉤子?
答:三種,一種是全局導航鉤子:router.beforeEach(to,from,next),作用:跳轉前進行判斷攔截。第二種:組件內的鉤子;第三種:單獨路由獨享組件
4、scss是什麼?安裝使用的步驟是?有哪幾大特性?
答:預處理css,把css當前函數編寫,定義變數,嵌套。 先裝css-loader、node-loader、sass-loader等載入器模塊,在webpack-base.config.js配置文件中加多一個拓展:extenstion,再加多一個模塊:mole裡面test、loader
4.1、scss是什麼?在vue.cli中的安裝使用步驟是?有哪幾大特性?
答:css的預編譯。
使用步驟:
第一步:用npm 下三個loader(sass-loader、css-loader、node-sass)
第二步:在build目錄找到webpack.base.config.js,在那個extends屬性中加一個拓展.scss
第三步:還是在同一個文件,配置一個mole屬性
第四步:然後在組件的style標簽加上lang屬性 ,例如:lang=」scss」
有哪幾大特性:
1、可以用變數,例如($變數名稱=值);
2、可以用混合器,例如()
3、可以嵌套
5、mint-ui是什麼?怎麼使用?說出至少三個組件使用方法?
答:基於vue的前端組件庫。npm安裝,然後import樣式和js,vue.use(mintUi)全局引入。在單個組件局部引入:import {Toast} from 『mint-ui』。組件一:Toast(『登錄成功』);組件二:mint-header;組件三:mint-swiper
6、v-model是什麼?怎麼使用? vue中標簽怎麼綁定事件?
答:可以實現雙向綁定,指令(v-class、v-for、v-if、v-show、v-on)。vue的model層的data屬性。綁定事件:<input @click=doLog() />
7、axios是什麼?怎麼使用?描述使用它實現登錄功能的流程?
答:請求後台資源的模塊。npm install axios -S裝好,然後發送的是跨域,需在配置文件中config/index.js進行設置。後台如果是Tp5則定義一個資源路由。js中使用import進來,然後.get或.post。返回在.then函數中如果成功,失敗則是在.catch函數中
8、axios+tp5進階中,調用axios.post(『api/user』)是進行的什麼操作?axios.put(『api/user/8′)呢?
答:跨域,添加用戶操作,更新操作。
9、什麼是RESTful API?怎麼使用?
答:是一個api的標准,無狀態請求。請求的路由地址是固定的,如果是tp5則先路由配置中把資源路由配置好。標准有:.post .put .delete
10、vuex是什麼?怎麼使用?哪種功能場景使用它?
答:vue框架中狀態管理。在main.js引入store,注入。新建了一個目錄store,….. export 。場景有:單頁應用中,組件之間的狀態。音樂播放、登錄狀態、加入購物車
11、mvvm框架是什麼?它和其它框架(jquery)的區別是什麼?哪些場景適合?
答:一個model+view+viewModel框架,數據模型model,viewModel連接兩個
區別:vue數據驅動,通過數據來顯示視圖層而不是節點操作。
場景:數據操作比較多的場景,更加便捷
12、自定義指令(v-check、v-focus)的方法有哪些?它有哪些鉤子函數?還有哪些鉤子函數參數?
答:全局定義指令:在vue對象的directive方法裡面有兩個參數,一個是指令名稱,另外一個是函數。組件內定義指令:directives
鉤子函數:bind(綁定事件觸發)、inserted(節點插入的時候觸發)、update(組件內相關更新)
鉤子函數參數:el、binding
13、說出至少4種vue當中的指令和它的用法?
答:v-if:判斷是否隱藏;v-for:數據循環出來;v-bind:class:綁定一個屬性;v-model:實現雙向綁定
14、vue-router是什麼?它有哪些組件?
答:vue用來寫路由一個插件。router-link、router-view
15、導航鉤子有哪些?它們有哪些參數?
答:導航鉤子有:a/全局鉤子和組件內獨享的鉤子。b/beforeRouteEnter、afterEnter、beforeRouterUpdate、beforeRouteLeave
參數:有to(去的那個路由)、from(離開的路由)、next(一定要用這個函數才能去到下一個路由,如果不用就攔截)最常用就這幾種
16、Vue的雙向數據綁定原理是什麼?
答:vue.js 是採用數據劫持結合發布者-訂閱者模式的方式,通過Object.defineProperty()來劫持各個屬性的setter,getter,在數據變動時發布消息給訂閱者,觸發相應的監聽回調。
具體步驟:
第一步:需要observe的數據對象進行遞歸遍歷,包括子屬性對象的屬性,都加上 setter和getter
這樣的話,給這個對象的某個值賦值,就會觸發setter,那麼就能監聽到了數據變化
第二步:compile解析模板指令,將模板中的變數替換成數據,然後初始化渲染頁面視圖,並將每個指令對應的節點綁定更新函數,添加監聽數據的訂閱者,一旦數據有變動,收到通知,更新視圖
第三步:Watcher訂閱者是Observer和Compile之間通信的橋梁,主要做的事情是:
1、在自身實例化時往屬性訂閱器(dep)裡面添加自己
2、自身必須有一個update()方法
3、待屬性變動dep.notice()通知時,能調用自身的update()方法,並觸發Compile中綁定的回調,則功成身退。
第四步:MVVM作為數據綁定的入口,整合Observer、Compile和Watcher三者,通過Observer來監聽自己的model數據變化,通過Compile來解析編譯模板指令,最終利用Watcher搭起Observer和Compile之間的通信橋梁,達到數據變化 -> 視圖更新;視圖交互變化(input) -> 數據model變更的雙向綁定效果。
ps:16題答案同樣適合」vue data是怎麼實現的?」此面試題。
17、請詳細說下你對vue生命周期的理解?
答:總共分為8個階段創建前/後,載入前/後,更新前/後,銷毀前/後。
創建前/後: 在beforeCreated階段,vue實例的掛載元素$el和數據對象data都為undefined,還未初始化。在created階段,vue實例的數據對象data有了,$el還沒有。
載入前/後:在beforeMount階段,vue實例的$el和data都初始化了,但還是掛載之前為虛擬的dom節點,data.message還未替換。在mounted階段,vue實例掛載完成,data.message成功渲染。
更新前/後:當data變化時,會觸發beforeUpdate和updated方法。
銷毀前/後:在執行destroy方法後,對data的改變不會再觸發周期函數,說明此時vue實例已經解除了事件監聽以及和dom的綁定,但是dom結構依然存在
18、請說下封裝 vue 組件的過程?
答:首先,組件可以提升整個項目的開發效率。能夠把頁面抽象成多個相對獨立的模塊,解決了我們傳統項目開發:效率低、難維護、復用性等問題。
然後,使用Vue.extend方法創建一個組件,然後使用Vue.component方法注冊組件。子組件需要數據,可以在props中接受定義。而子組件修改好數據後,想把數據傳遞給父組件。可以採用emit方法。
19、你是怎麼認識vuex的?
答:vuex可以理解為一種開發模式或框架。比如PHP有thinkphp,java有spring等。
通過狀態(數據源)集中管理驅動組件的變化(好比spring的IOC容器對bean進行集中管理)。
應用級的狀態集中放在store中; 改變狀態的方式是提交mutations,這是個同步的事物; 非同步邏輯應該封裝在action中。
20、vue-loader是什麼?使用它的用途有哪些?
答:解析.vue文件的一個載入器,跟template/js/style轉換成js模塊。
用途:js可以寫es6、style樣式可以scss或less、template可以加jade等
21、請說出vue.cli項目中src目錄每個文件夾和文件的用法?
答:assets文件夾是放靜態資源;components是放組件;router是定義路由相關的配置;view視圖;app.vue是一個應用主組件;main.js是入口文件
22、vue.cli中怎樣使用自定義的組件?有遇到過哪些問題嗎?
答:第一步:在components目錄新建你的組件文件(smithButton.vue),script一定要export default {
第二步:在需要用的頁面(組件)中導入:import smithButton from 『../components/smithButton.vue』
第三步:注入到vue的子組件的components屬性上面,components:{smithButton}
第四步:在template視圖view中使用,<smith-button> </smith-button>
問題有:smithButton命名,使用的時候則smith-button。
23、聊聊你對Vue.js的template編譯的理解?
答:簡而言之,就是先轉化成AST樹,再得到的render函數返回VNode(Vue的虛擬DOM節點)
詳情步驟:
首先,通過compile編譯器把template編譯成AST語法樹(abstract syntax tree 即 源代碼的抽象語法結構的樹狀表現形式),compile是createCompiler的返回值,createCompiler是用以創建編譯器的。另外compile還負責合並option。
然後,AST會經過generate(將AST語法樹轉化成render funtion字元串的過程)得到render函數,render的返回值是VNode,VNode是Vue的虛擬DOM節點,裡面有(標簽名、子節點、文本等等)

C. vue自定義指令,實現添加該指令可以將傳入的數據進行拆分後求和的操作,比如[1,2,3],使用指令和為6

// v-sum="[1, 2, 3]"

Vue.directive('sum',function(el,binding){

consttotal=binding.value.rece((acc,num)=>acc+=num);

console.log(total);

});

D. 前端vue是什麼

Vue.js 是一個JavaScriptMVVM庫,是一套構建用戶界面的漸進式框架。它是以數據驅動和組件化的思想構建的,採用自底向上增量開發的設計。相比於Angular.js,Vue.js提供了更加簡潔、更易於理解的API,使得我們能夠快速地上手並使用Vue.js;同時比起 React + Rex 相對復雜的架構,Vue.js 更加輕量級也更加容易上手,是初創項目的首選前端框架。Vue 的核心庫只關注視圖層,它不僅易於上手,還便於與第三方庫或既有項目整合。
今天帶領大家來了解一款漸進式JavaScript框架——Vue。

近年來,前端開發領域,舊瀏覽器逐漸淘汰,移動端開發需求逐年增加,前端交互越來越多,功能越來越復雜。架構從傳統後台MVC向REST API + 前端MV* 遷移。
MV*相當於MVC即:
Model(模型)表示應用程序核心(比如資料庫記錄列表)。
View(視圖)顯示前端的學習都是需要不斷的學習,學一天停一停相當於白學,學習效果很差,如果你想有人一起學習可以來這個扣裙,首先是132 中間是667最後是127 都是零基礎的同學,大家相互鼓勵 共同努力 只是學著玩就不建議來了!!!數據(資料庫記錄)。
Controller(控制器)處理輸入(寫入資料庫記錄)。
MVP
Model(模型)表示應用程序核心(比如資料庫記錄列表)。
View(視圖)顯示數據(資料庫記錄)。
Presenter(表示器)負責邏輯處理業務。
與MVC差別在於:
1、View與Model完全隔離。
2、Presenter與View的具體實現技術無關。
3、可以進行View的模擬測試。
MVVM(Vue就是一種MVVM框架)
Model(模型)表示應用程序核心(比如資料庫記錄列表)。
View(視圖)顯示數據(資料庫記錄)。
ViewModel(觀察者)負責把Model的數據同步到View顯示出來,還負責把View的修改同步回Model。
優點:高內聚,低耦合(可重用性、可移植性)。
Vue是一款數據驅動+組件化的前端開發框架,對比於Angular和React,Vue.js更輕量,gzip後大小隻有26K (Angular 56K,React 44K),同時更易上手,學習曲線平穩,吸收兩家之長,借鑒了angular的指令和react的組件化。

E. Vue.js中常用指令有哪些

  1. 數據渲染:v-text、v-html、{{}}

  2. 條件渲染 控制模板隱藏:v-show 、v-if、v-else
  3. v-for 渲染循環列表

  4. v-on綁定事件

  5. v-bind 綁定屬性

F. 創建Vue項目之前需要做哪些准備工作Vue項目如何創建指令是什麼並對指令解

使用Vue,當然要先去學習它的使用方法了,請參考官方文檔Vue

創建Vue項目,可以用官方的腳手架,請參考官方文檔vue-cli

指令就是在HTML標簽上以v-開頭的屬性,比如:v-for, v-if等以及自定義指令。Vue會根據指令去執行相應的操作,自定義指令就執行自定義的操作。詳細請參考官文檔。

G. vue的v-once指令怎麼用

vue的v-once指令具體實現例子如下:

<!DOCTYPEhtml>


<html>

<head>

<metacharset="UTF-8">

<title></title>

<scripttype="text/javascript"src="vue1.0.25.js"></script>

</head>

<body>

<divid="app">

<pv-once>fgffd{{msg}}</p>

<p>對對對{{msg}}</p>

<inputtype="text"v-model="msg"name=""id=""value=""/>

</div>

<scripttype="text/javascript">

newVue({

el:'#app',

data:{

msg:'今天的天氣很好'

}

})

</script>

</body>

</html>

H. Web前端如何使用Vue編寫一個長按指令

今天小編要跟大家分享的文章是關於Web前端如何使用Vue編寫一個長按指令?正在從事web前端工作的小夥伴們有沒有想過只需按住一個按鈕幾秒鍾就能在你的
Vue應用中觸發一個功能?


有沒有想過創建一個按鈕,按下一次就可以清除單次輸入(或者持續按住可以清除所有輸入)?


本文就是講解如何在按下(或者按住)一個按鈕時,既執行一個函數,又清除輸入。


首先,我會講解如何使用純JS實現。而後也會創建一個Vue指令。下面就讓我們一起來看一看吧。

一、原理


要實現長按,用戶需要按下並按住按鈕幾秒鍾。


想通過代碼模擬這一效果,我們需要在滑鼠「點擊」按下按鈕時,啟動一個計時器監聽用戶按下的時長,如果時間超過我們期望的時長,就執行相應的函數。


非常簡單!然而,我們需要知道用戶何時按住按鈕。


二、如何實現


當用戶點擊按鈕時,在點擊事件之前會觸發另外兩個事件:mousedown和mouseup。


當用戶按下按鈕時觸發mousedown事件,用戶松開按鈕時調用mouseup事件。


我們需要做的是:


1.mousedown事件觸發時,啟動計時器。


2.一旦mouseup事件在預期的2秒前被觸發,就清除計時器,不要執行相應的函數。就當作一個普通的點擊事件。


只要計時器在我們預設的時間內沒有被清除,即mouseup
事件沒有被觸發——那麼可以斷定用戶沒有釋放按鈕。因此,可以判定為一次長按,可以執行關聯的函數。


三、實踐


讓我們深入代碼,完成這一功能。


首先,我們必須定義三件事,即:


1.一個變數用於存儲計時器。


2.一個啟動功能函數,用於啟動計時器。


3.一個取消功能函數,用於取消計時器。


1、變數


這個變數主要用來保存setTimeout的值,以便當滑鼠mouseup事件觸發時我們可以取消它。


letpressTimer=null;


我們把變數值設置為null是為了在執行取消操作前,檢查這個變數的值判斷當前是否有一個正在運行的計時器。


2、啟動函數


這個函數包括一個setTimeout,它是JavaScript中的一個基本方法,允許在特定時間之後執行一個函數。


注意,click事件執行的過程中,會觸發另外兩個事件。但是我們需要啟動計時器的是mousedown
事件。如果只是點擊事件,不需要啟動計時器。//創建計時器(1s之後執行函數)

letstart=(e)=>{

//如果是點擊事件,不啟動計時器

if(e.type==='click'&&e.button!==0){

return;

}

//在啟動一個定時器之前確保沒有正在運行的計時器

if(pressTimer===null){

pressTimer=setTimeout(()=>{

//執行任務!!!

},1000)

}

}

3、取消函數


這個函數見名知意,用來取消啟動函數創建的setTimeout。


要取消setTimeout,可以使用JavaScript中的clearTimeout方法,它主要用來清除setTimeout()
方法設置的計時器。


在使用clearTimeout之前,需要檢查pressTimer變數是否為null。如果沒有為
ull,意味著有一個正在運行的計時器。因此,我們需要先清除它,並且將pressTimer變數設置為null。letcancel=(e)=>{

//檢查pressTimer的值是否為null

if(pressTimer!==null){

clearTimeout(pressTimer)

pressTimer=null

}

}

一旦mouseup事件觸發,這個函數就會被調用。


4、設置觸發器


剩下的就是將事件監聽器添加到想要長按效果的按鈕上。


addEventListener("mousedown",start);


addEventListener("click",cancel);


以上代碼合到一起是這樣://定義變數

letpressTimer=null;

//創建計時器(1秒後執行函數)

letstart=(e)=>{

if(e.type==='click'&&e.button!==0){

return;

}

if(pressTimer===null){

pressTimer=setTimeout(()=>{

//執行任務!!!

},1000)

}

}

//停止計時器

letcancel=(e)=>{

//檢查是否有正在運行的計時器

if(pressTimer!==null){

clearTimeout(pressTimer);

pressTimer=null;

}

}

//選擇id為longPressButton的元素

letel=document.getElementById('longPressButton');

//添加事件監聽器

el.addEventListener("mousedown",start);

//長按事件取消,取消計時器

el.addEventListener("click",cancel);

el.addEventListener("mouseout",cancel);

5、用Vue指令包裝


創建Vue指令時,可以創建全局或局部指令,本文中,我們採用全局指令。


首先,我們必須聲明自定義指令的名稱。


Vue.diective('longpress',{


})


這就注冊了一個名為v-longpress的全局自定義指令。


接下來,我們添加帶參數的bind鉤子函數,它允許我們引用指令綁定的元素,獲取傳遞給指令的值,並標識指令使用的組件。Vue.directive('longpress',{

bind:function(el,binding,vNode){

}

})

接下來,我們在bind函數中添加長按功能的代碼。Vue.directive('longpress',{

bind:function(el,binding,vNode){

//定義變數

letpressTimer=null;

//定義函數處理程序

//創建計時器(1秒後執行函數)

letstart=(e)=>{

if(e.type==='click'&&e.button!==0){

return;

}

if(pressTimer===null){

pressTimer=setTimeout(()=>{

//執行任務!!!

},1000)

}

}

//取消計時器

letcancel=(e)=>{

//檢查是否有正在運行的計時器

if(pressTimer!==null){

clearTimeout(pressTimer);

pressTimer=null;

}

}

//添加事件監聽器

el.addEventListener("mousedown",start);

//取消計時器

el.addEventListener("click",cancel);

el.addEventListener("mouseout",cancel);

}

})

接下來,我們需要添加一個函數來運行傳遞給longpress指令的方法。Vue.directive('longpress',{

bind:function(el,binding,vNode){

//定義變數

letpressTimer=null;

//定義函數處理程序

//創建計時器(1秒後執行函數)

letstart=(e)=>{

if(e.type==='click'&&e.button!==0){

return;

}

if(pressTimer===null){

pressTimer=setTimeout(()=>{

//執行函數

handler();

},1000)

}

}

//停止計時器

letcancel=(e)=>{

//檢查是否有正在運行的計時器

if(pressTimer!==null){

clearTimeout(pressTimer);

pressTimer=null;

}

}

//運行函數

consthandler=(e)=>{

//執行傳遞給指令的方法

binding.value(e)

}

//添加事件監聽器

el.addEventListener("mousedown",start);

//取消計時器

el.addEventListener("click",cancel);

el.addEventListener("mouseout",cancel);

}

})

現在,可以在Vue應用中使用這個指令了,除非使用者給指令傳入的值不是一個函數。因此,我們需要通過警告反饋給使用者。


為了反饋給使用者,我們在bind函數中添加了以下內容://確保提供的表達式是函數

if(typeofbinding.value!=='function'){

//獲取組件名稱

constcompName=vNode.context.name;

//將警告傳遞給控制台

letwarn=`[longpress:]providedexpression'${binding.expression}'isnotafunction,buthastobe`;

if(compName){warn+=`Foundincomponent'${compName}'`}

console.warn(warn);

}

最後,如果這個指令也適用於觸屏設備,那會是極好的。因此,我們添加了touchstart、touchend和touchcancel
事件監聽器。


最終代碼如下:Vue.directive('longpress',{

bind:function(el,binding,vNode){

//確保提供的表達式是函數

if(typeofbinding.value!=='function'){

//獲取組件名稱

constcompName=vNode.context.name;

//將警告傳遞給控制台

letwarn=`[longpress:]providedexpression'${binding.expression}'isnotafunction,buthastobe`;

if(compName){warn+=`Foundincomponent'${compName}'`}

console.warn(warn);

}

//定義變數

letpressTimer=null;

//定義函數處理程序

//創建計時器(1秒後執行函數)

letstart=(e)=>{

if(e.type==='click'&&e.button!==0){

return;

}

if(pressTimer===null){

pressTimer=setTimeout(()=>{

//執行函數

handler();

},1000)

}

}

//取消計時器

letcancel=(e)=>{

//檢查計時器是否有值

if(pressTimer!==null){

clearTimeout(pressTimer);

pressTimer=null;

}

}

//運行函數

consthandler=(e)=>{

//執行傳遞給指令的方法

binding.value(e)

}

//添加事件監聽器

el.addEventListener("mousedown",start);

el.addEventListener("touchstart",start);

//取消計時器

el.addEventListener("click",cancel);

el.addEventListener("mouseout",cancel);

el.addEventListener("touchend",cancel);

el.addEventListener("touchcancel",cancel);

}

})

現在可以在Vue組件里使用了: