㈠ Vue - 組件和Vue.extend
在初學 Vue 的時候,都是利用 cdn 的方式在一個頁面中導入 vue.js 的庫文件.
接著,肯定就學到了組件開發.
當然,也是在單頁面中.
API文檔告訴我們
在後來,學到了使用 vue-cli 搭配 .vue 模板的方式開發組件.
好了,三種組件創建的方式說完了,且在各自的環境里都能夠正常的運作.
在 Vue 開發中,所有的組件本質上都是由一個繼承自 Vue 的構造函數創建的.
比如在注冊局部組件時.
從視覺上,我們看到 TodoListComp 只是一個普通的 Object 對象.
直接賦值給了其他組件的 components 屬性里.
然後,這個組件就成為了一個局部組件,並可以在注冊了當前組件的內部去使用了.
那它在內部做了什麼,導致這個普通的對象最後可以被當成是一個正常的組件來使用呢?
比如,普通對象上都沒有 $el 之類的屬性.丟給 components 之後,就啥都有了.
使用Vue.extend(options)會根據傳入的options創建一個VueComponent的組件構造函數並返回.
既然使用 Vue.extend 會返回一個組件的構造函數.
那麼我們就可以使用 new 這個返回的構造函數
並手動的 mount 並替換某個 dom 節點(就和 new App() 一樣)
前面,我么已經知道了,所有的 vue 組件,不管是全局的還是局部的.
都是利用 Vue.extend 方法構建並返回出一個繼承自 Vue 的組件構造函數.
這個函數接受一個滿足了 Vue 組件屬性項的普通的 Object 對象.
在.vue模板文件開發中,也不例外.
我們可以看看,在書寫 .vue 模板文件時,我們到底在寫什麼?
我們寫的是一個 .vue 文件.
並按照 <template></template> <script></script> ( 這里不關注 <style></style> 節點 ) 的格式編寫 .vue 文件.
把它整合起來來看.
等價於
好了,繼續回到 .vue 模板開發文件中.
在另外一個組件中,使用此組件時,我們會 import xxx from xxx.vue 並搭配 components:{ xxxx }
.vue 會被 webpack 中配置的 vue-loader 處理.這是我們已知的.
結合上述的判斷, vue-loader 僅僅只是把 .vue 文件編譯成了一個 vue.extend(options) 創建組件所需要的 options 普通對象而已.
既然 vue-loader 僅僅,只是把 .vue 模板文件編譯成了一個 options 普通對象.
那麼我們可以手動的使用 Vue.extends(options) 來獲得這個組件對象的構造函數.
拿到此組件的構造函數,我們就可以在 組件 mounted 的時候,通過 new 的方式,掛在到 html 上了. (而無需去注冊到 components,成為一個局部組件.直接把它當成一個自己熟悉的不能在熟悉的構造函數調用即可.)
既然我們已經知道:
我們完全可以直接使用 .js 文件的方式來創建 vue 組件,進而省略 .vue & vue-loader 這個執行的步驟.
此 .js 文件到處一個 vue 組件的構造函數.
在另外一個組件里
通過這樣的原理,我們完全可以在HTML頁面的任意地方,任意位置,任意的掛在我們自己的組件.並不一定必須使用.vue聲明式組件的語法.
[ 碼雲地址 ]
㈡ vue: WebStorm設置快速編譯運行的方法
WebSorm是一款優秀的前端開發工具,而Vue項目可以使用Node進行編譯運行,平常我們可以通過命令行部署項目進行調試。
本文介紹設置Webstorm進行快速部署Vue項目。
第一步
點擊啟動快捷按鈕旁邊的向下小箭頭,在列表中選擇Edit選項:
第二步
打開啟動設置頁面後,點擊左上角的加號添加新的運行方式:
第三步
在彈出的選擇框中,選擇node.js啟動模式:
第四步
在新打開的設置頁面中,在紅色圈中的地方設置如圖路徑的文件:
至此設置成功,直接點啟動按鈕就可以部署項目。
以上這篇vue:
WebStorm設置快速編譯運行的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:webstorm添加*.vue文件支持webstorm添加vue.js支持的方法教程webstorm中vue語法的支持詳解webstorm和.vue中es6語法報錯的解決方法詳解Webstorm
新建.vue文件支持高亮vue語法和es6語法
㈢ vue壓縮後的js可以反編譯出來嗎
vue壓縮後的js可以反編譯出來,反編譯方法為:
1、在桌面找到自己下載的瀏覽器軟體,點擊瀏覽器圖標。
㈣ Vue 模板編譯 是用來代替JSP的嗎
JSP可以和Vue一起使用,但vue本身更傾向於基於node的服務端渲染SSR
㈤ vue打包編譯後css文件引入失敗怎麼辦求求
不知道你說的 前後端沒有完全分離 指的是哪部分,如果模版數據耦合就麻煩了,僅僅是頁面耦合比較好辦。 如果用的是尤雨溪大大默認的 webpack配置,build 下應該會生成 js 等文件,以及 index.html。我的建議是,index.html 交後端
㈥ Vue項目中中編譯正確 控制台出現下列錯誤是什麼情況
1.
程序里可以含有不支持靜態編譯的控制項.
如:
字體選擇框
選擇顏色對話框
等
2.
也有可能是易語言軟體的問題...可以重裝安裝下試試
㈦ Vue 面試中常問知識點整理
生命周期:Vue實例從開始創建、初始化數據、編譯模板、掛載Dom→渲染、更新→渲染、卸載等一系列過程,我們稱這是Vue的生命周期,各個階段有相對應的事件鉤子。
beforeCreate(創建前),在數據觀測和初始化事件還未開始
created(創建後),完成數據觀測,屬性和方法的運算,初始化事件, $el 屬性還沒有顯示出來
beforeMount(載入前),在掛載開始之前被調用,相關的render函數首次被調用。實例已完成以下的配置:編譯模板,把data裡面的數據和模板生成html。注意此時還沒有掛載html到頁面上。
mounted(載入後),在 el 被新創建的 vm.$el 替換,並掛載到實例上去之後調用。實例已完成以下的配置:用上面編譯好的html內容替換 el 屬性指向的DOM對象。完成模板中的html渲染到html頁面中。此過程中進行ajax交互。
beforeUpdate(更新前),在數據更新之前調用,發生在虛擬DOM重新渲染和打補丁之前。可以在該鉤子中進一步地更改狀態,不會觸發附加的重渲染過程。
updated(更新後),在由於數據更改導致的虛擬DOM重新渲染和打補丁之後調用。調用時,組件DOM已經更新,所以可以執行依賴於DOM的操作。然而在大多數情況下,應該避免在此期間更改狀態,因為這可能會導致更新無限循環。該鉤子在伺服器端渲染期間不被調用。
beforeDestroy(銷毀前),在實例銷毀之前調用。實例仍然完全可用。
destroyed(銷毀後),在實例銷毀之後調用。調用後,所有的事件監聽器會被移除,所有的子實例也會被銷毀。該鉤子在伺服器端渲染期間不被調用。
注意:
created 階段的ajax請求與 mounted 請求的區別:前者頁面視圖未出現,如果請求信息過多,頁面會長時間處於白屏狀態。
mounted 不會承諾所有的子組件也都一起被掛載。如果你希望等到整個視圖都渲染完畢,可以用 vm.$nextTick 。
初始化組件時,僅執行了 beforeCreate/Created/beforeMount/mounted 四個鉤子函數
當改變 data 中定義的變數(響應式變數)時,會執行 beforeUpdate/updated 鉤子函數
當切換組件(當前組件未緩存)時,會執行 beforeDestory/destroyed 鉤子函數
初始化和銷毀時的生命鉤子函數均只會執行一次, beforeUpdate/updated 可多次執行
僅當子組件完成掛載後,父組件才會掛載
當子組件完成掛載後,父組件會主動執行一次beforeUpdate/updated鉤子函數(僅首次)
父子組件在data變化中是分別監控的,但是在更新props中的數據是關聯的
銷毀父組件時,先將子組件銷毀後才會銷毀父組件
組件的初始化(mounted之前)分開進行,掛載是從上到下依次進行
當沒有數據關聯時,兄弟組件之間的更新和銷毀是互不關聯的
mixin中的生命周期與引入該組件的生命周期是僅僅關聯的,且mixin的生命周期優先執行
1、什麼是vue生命周期?
答: Vue 實例從創建到銷毀的過程,就是生命周期。從開始創建、初始化數據、編譯模板、掛載Dom→渲染、更新→渲染、銷毀等一系列過程,稱之為 Vue 的生命周期。
2、vue生命周期的作用是什麼?
答:它的生命周期中有多個事件鉤子,讓我們在控制整個Vue實例的過程時更容易形成好的邏輯。
3、vue生命周期總共有幾個階段?
答:它可以總共分為8個階段:創建前/後、載入前/後、更新前/後、銷毀前/銷毀後。
5、DOM 渲染在哪個周期中就已經完成?
答:DOM 渲染在 mounted 中就已經完成了。
vue實現數據雙向綁定主要是:採用數據劫持結合發布者-訂閱者模式的方式,通過 Object.defineProperty() 來劫持各個屬性的 setter,getter ,在數據變動時發布消息給訂閱者,觸發相應監聽回調。當把一個普通 Javascript 對象傳給 Vue 實例來作為它的 data 選項時,Vue 將遍歷它的屬性,用 Object.defineProperty() 將它們轉為 getter/setter 。用戶看不到 getter/setter,但是在內部它們讓 Vue 追蹤依賴,在屬性被訪問和修改時通知變化。
vue的數據雙向綁定 將MVVM作為數據綁定的入口,整合 Observer ,Compile和 Watcher 三者,通過 Observer 來監聽自己的 model 的數據變化,通過 Compile 來解析編譯模板指令(vue中是用來解析 {{}}),最終利用 watcher 搭起observer和 Compile 之間的通信橋梁,達到數據變化 —>視圖更新;視圖交互變化( input )—>數據 model 變更雙向綁定效果。
js實現簡單的雙向綁定:
1、父組件與子組件傳值
父組件傳給子組件:子組件通過 props 方法接受數據;
子組件傳給父組件: $emit 方法傳遞參數
2、非父子組件間的數據傳遞,兄弟組件傳值 eventBus ,就是創建一個事件中心,相當於中轉站,可以用它來傳遞事件和接收事件。項目比較小時,用這個比較合適。
hash模式:在瀏覽器中符號「#」,#以及#後面的字元稱之為hash,用 window.location.hash 讀取。特點:hash雖然在URL中,但不被包括在HTTP請求中;用來指導瀏覽器動作,對服務端安全無用,hash不會重載入頁面。
history模式:history採用HTML5的新特性;且提供了兩個新方法: pushState(), replaceState()可以對瀏覽器歷史記錄棧進行修改,以及popState事件的監聽到狀態變更。
需求一:
在一個列表頁中,第一次進入的時候,請求獲取數據。
點擊某個列表項,跳到詳情頁,再從詳情頁後退回到列表頁時,不刷新。
也就是說從其他頁面進到列表頁,需要刷新獲取數據,從詳情頁返回到列表頁時不要刷新。
解決方案
在 App.vue設置:
假設列表頁為 list.vue ,詳情頁為 detail.vue ,這兩個都是子組件。
我們在 keep-alive 添加列表頁的名字,緩存列表頁。
然後在列表頁的 created 函數里添加ajax請求,這樣只有第一次進入到列表頁的時候才會請求數據,當從列表頁跳到詳情頁,再從詳情頁回來的時候,列表頁就不會刷新。
這樣就可以解決問題了。
需求二:
在需求一的基礎上,再加一個要求:可以在詳情頁中刪除對應的列表項,這時返回到列表頁時需要刷新重新獲取數據。
我們可以在路由配置文件上對 detail.vue 增加一個 meta 屬性。
這個 meta 屬性,可以在詳情頁中通過 this.$route.meta.isRefresh 來讀取和設置。
設置完這個屬性,還要在 App.vue 文件里設置 watch 一下 $route 屬性。
這樣就不需要在列表頁的 created 函數里用 ajax 來請求數據了,統一放在 App.vue 里來處理。
觸發請求數據有兩個條件:
從其他頁面(除了詳情頁)進來列表時,需要請求數據。
從詳情頁返回到列表頁時,如果詳情頁 meta 屬性中的 isRefresh 為 true ,也需求重新請求數據。
當我們在詳情頁中刪除了對應的列表項時,就可以將詳情頁 meta 屬性中的 isRefresh 設為 true 。這時再返回到列表頁,頁面會重新刷新。
1、css只在當前組件起作用
答:在 style 標簽中寫入 scoped 即可 例如: <style scoped></style>
2、v-if 和 v-show 區別
答: v-if 按照條件是否渲染, v-show 是 display 的 block 或 none ;
3、 $route 和 $router 的區別
答: $route 是「路由信息對象」,包括 path,params,hash,query,fullPath,matched,name 等路由信息參數。而 $router 是「路由實例」對象包括了路由的跳轉方法,鉤子函數等。
㈧ weex最新版如何將.vue編譯成.js文件
1.components 目錄新建validate.js:
export default{
install(Vue){
Vue.prototype.$myName = "zhagngsan";
}
}
我插件定義屬性
2.入口文件jssrc/index.js 加入:
// 引入
import validate from "./../components/validate";
// 使用
Vue.use(validate);
3.我user-username.vue 組件驗證:
mounted(){
alert(this.$myName);
},
瀏覽器訪問登錄頁面功彈:
寫圖片描述
4.剛剛我已經插件定義屬性馬何定義:
export default{
install(Vue){
// Vue.prototype.$myName = "zhagngsan";
Vue.prototype.checkUserName = (value) => {
if(/\w{6,20}/.test(value)){
return true;
}else{
return false;
}
}
}
}
同使用該:
if(this.checkUserName("hello")){
alert("ok");
}else{
alert("error");
}
5.
寫圖片描述
我修改user-name.vue 組件實現文本框驗證:
用戶名
用戶合
寫圖片描述
自定義指令
文檔:
1、validate.js:
export default{
install(Vue){
// Vue.prototype.$myName = "zhagngsan";
Vue.prototype.checkUserName = (value) => {
if(value == ""){
return true; // 沒填寫,默認true
}
if(/\w{6,20}/.test(value)){
return true;
}else{
return false;
}
}
Vue.directive("uname",{
bind(){
console.log("bind"); // 調用
},
update(el,binding,vnode){
console.log(el);
console.log(binding);
console.log(vnode);
},
})
}
}
2、我自定uname 指令面看何使用
我組件模板使用 v-uname 並且給綁定username數據
我打瀏覽器控制台:
寫圖片描述
說明我定義指令執行:
bind(){
console.log("bind"); // 調用
},
3、面我看update 東東
update(el,binding,vnode){
console.log(el);
console.log(binding);
console.log(vnode);
}
㈨ vue原理是什麼
原理是:vue在編譯的時候通過在DOM元素以及css樣式上加上唯一標記,實現樣式私有化,不污染全局樣式。
如:編譯為;對應的樣式。my-class編譯為。my-class[data-v-56e7f951]。
state中保存著共享數據;
修改state中的狀態只能提交mutations中的方法,且方法必須是同步的;
需要非同步方法時,寫在actions中,提交mutations,由mutations修改state狀態。
(9)運維vue編譯擴展閱讀:
vue在web開發、網站製作中的優勢
1、據綁定:vue會根據對應的元素,進行設置元素數據,通過輸入框,以及get獲取數據等多種方式進行數據的實時綁定,進行網頁及應用的數據渲染 。
2、組件式開發:通過vue的模塊封裝,它可以將一個web開發中設計的各種模塊進行拆分,變成單獨的組件,然後通過數據綁定,調用對應模版組件,同時傳入參數,即可完成對整個項目的開發。
3、簡單小巧的核心,漸進式技術棧,足以應付任何規模的應用。
㈩ laravel 怎麼編譯vue
最近也在學習laravel的框, 因為之前學過tp框架, 都說laravel是最優雅的框架,所以開學後忍不住去試試這個在國外已經火的不要不要的框架.
總的來說,對於學習完tp框架後,我覺得tp畢竟是中國人自己寫的,所以很多思想還是很好接受的,如果你想對php框架入門的話,我倒覺得tp是個挺不錯的選擇。
當然ci框架也是一個很不錯的選擇。因為它足夠輕量級。tp的mvc架構會讓你很好接受。
在前後台的應用上看起來很方便。當然這在yii框架里好像更簡單方便些,因為我只是接觸國yii框架,不是特別了解。在接下來我想去會一會這個框架。
但laravel應該還得再學習,自己用laravel寫了自己的博客。
當然還需要完善。因為在我看到laravist這個laravel國內的視頻社區時我有也種想法。做不到那麼好。但至少我覺得能實現自己的一些需求也是一件好事。