① laravel 怎麼編譯vue
最近也在學習laravel的框, 因為之前學過tp框架, 都說laravel是最優雅的框架,所以開學後忍不住去試試這個在國外已經火的不要不要的框架.
總的來說,對於學習完tp框架後,我覺得tp畢竟是中國人自己寫的,所以很多思想還是很好接受的,如果你想對php框架入門的話,我倒覺得tp是個挺不錯的選擇。
當然ci框架也是一個很不錯的選擇。因為它足夠輕量級。tp的mvc架構會讓你很好接受。
在前後台的應用上看起來很方便。當然這在yii框架里好像更簡單方便些,因為我只是接觸國yii框架,不是特別了解。在接下來我想去會一會這個框架。
但laravel應該還得再學習,自己用laravel寫了自己的博客。
當然還需要完善。因為在我看到laravist這個laravel國內的視頻社區時我有也種想法。做不到那麼好。但至少我覺得能實現自己的一些需求也是一件好事。
② vue壓縮後的js可以反編譯出來嗎
vue壓縮後的js可以反編譯出來,反編譯方法為:
1、在桌面找到自己下載的瀏覽器軟體,點擊瀏覽器圖標。
③ Vue項目中中編譯正確 控制台出現下列錯誤是什麼情況
1.
程序里可以含有不支持靜態編譯的控制項.
如:
字體選擇框
選擇顏色對話框
等
2.
也有可能是易語言軟體的問題...可以重裝安裝下試試
④ 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節點,裡面有(標簽名、子節點、文本等等)
⑤ 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 組件,來實現文本框驗證:
<template>
<div class="form-group">
<label class="col-sm-2 control-label">用戶名</label>
<div class="col-sm-10">
<input type="text" v-model="username" v-on:change="userNameChange" class="form-control" :placeholder="username">
<label class="label label-danger" v-if="showErrorLabel">用戶不合法</label>
</div>
</div>
</template>
<script>
export default{
props:["placeholder"],
data:function () {
return {
username:"",
showErrorLabel:false,
}
},
methods:{
userNameChange(){
// 用戶名改變的方法里判斷 用戶名是否復合要求
if(this.checkUserName(this.username)){
this.showErrorLabel = false; // 如果驗證沒有通過就顯示錯誤提示
}else{
this.showErrorLabel = true;
}
// 調用父組件的方法
this.$emit("childChange","username",this.username)
}
}
}
</script>
這里寫圖片描述
自定義指令
文檔:
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 指令,下面來看一下如何使用的?
<input type="text" v-uname="username" v-model="username" v-on:change="userNameChange" class="form-control" :placeholder="username">
我們在組件的模板里使用了 v-uname ,並且給綁定了」username」數據。
我們打開瀏覽器的控制台:
這里寫圖片描述
說明我們定義的指令里,這個方法執行了:
bind(){
console.log("bind"); // 只會調用一次
},
3、下面我們來看一下update 里的東東
update(el,binding,vnode){
console.log(el);
console.log(binding);
console.log(vnode);
}
⑥ vue編譯後的js和map文件修改不了嗎
無法還原,編譯後的js為壓縮文件,很多代碼都不存在了
⑦ 手寫實現vue3數據響應式 vue3全新vdom+編譯器改進vue3編譯器流程\x09vue3 p
摘要 reactive## 關於Vue3
⑧ 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 模板編譯 是用來代替JSP的嗎
JSP可以和Vue一起使用,但vue本身更傾向於基於node的服務端渲染SSR
⑩ vue和angular 編譯速度誰更快
框架之間的對比雖然是老生常談,但也確實是繞不過去的話題,Vue本身的文檔里也直接就有和其他框架的對比。同為開源的技術方案,比較本身其實沒有任何問題,但在寫Vue與其他框架的比較的時候,我們盡力做到兩點:
1. 確保事實的准確性。有的就是有,沒有就是沒有,不確定的就不說,弄錯了一定改。
2. 確保語氣的中立性。別人的缺點指出但不嘲諷,優點大方承認。
之前 @汪志成 對Vue跟 Angular 的比較文案提出了意見,我們也對應地進行了修訂。也歡迎社區繼續進行監督和反饋 —— 比較的目的不是扭曲大家的認知,而是為了幫助大家做出自己的判斷。
現在說回來大漠(後面都用大漠指代,注意跟 w3cplus@大漠老師不是一個人,對不住了哈哈)的這篇文章,很遺憾,以上兩點都不及格。
先說事實。
CLI/工具鏈
首先兩個框架 CLI 的定位不一致。vue-cli 不是一個打包工具,它只是一個 scaffold,也就是初始化工具。真正負責打包的是初始化之後項目內的 webpack 配置和 npm 腳本。從一開始vue-cli 就是這樣的設計意圖,項目真正的工具鏈在項目模板裡面而不是 CLI 裡面。
相比之下 @angular/cli 是一個全包式的命令行工具,一切都是通過 `ng` 來執行,但這不代表 `ng` 有的命令Vue就沒有對應的功能 —— 比如在vue-cli 生成的項目裡面:
npm run dev 對應 ng serve
npm run build 對應 ng build
npm run lint 對應 ng lint
npm run unit 對應 ng test
npm run e2e 對應 ng e2e
除了 i18n 之外,@angular/cli 有的Vue都有。『很多日常開發必備的功能都需要開發者自己去下載配置第三方的Node模塊』這句話是一個事實上的錯誤。看起來大漠連vue-cli 生成的項目都沒跑過就急著寫文章了呢。
其次,CLI 命令/參數多 =更優秀?並沒有這樣的道理,create-React-app 估計要哭暈在廁所了。如果我們仔細看看文中的截圖,ng build 的多個參數,其實就是對應不同的底層 webpack 配置。說實話,我相信不僅僅是我,對於很多其他開發者而言,更寧可直接閱讀 webpack 的文檔來調整真正的 webpack 配置(並且可以 commit 進項目),而不是去額外學習一套由 Angular 封裝的抽象,因為實際生產中需求千變萬化,完全被 CLI 封裝的配置不利於二次開發。
實事求是地說,@angular/cli 確實有一些值得學習的地方,比如 ng serve 對 SSL 的支持。我們也會在新版本的vue-cli 中持續吸收改進,但連vue-cli 能做什麼都沒弄清楚就拿玩具來打比方,只能貽笑大方了。
非同步載入模塊
我不知道為什麼大漠又截了個不知哪裡的舊中文文檔的圖,還沒截全 —— 最新的關於非同步載入的文檔是下面這兩個鏈接:
文檔中關於非同步組件的部分
路由文檔關於路由懶載入的部分
Vue將一個組件(以及其所有依賴)改為非同步載入,所需要的只是把:
改成
就這么簡單。這里注意三點:
當這樣分割的時候,該組件所依賴的其他組件或其他模塊都會自動被分割進對應的 chunk 里,不存在大漠所暗示的『手動改 500 個組件』這樣的情況。況且兩邊代碼分割的功能都是 webpack 提供的,我真不知道大漠是真的不懂還是故意誤導。
所謂的路由級別的分割,只需要把這個組件作為路由組件就可以了,甚至連路由配置表都不用改。
更重要的是這樣的非同步組件並不一定只能用在路由層面 —— 任何你要用到一個組件的地方,都可以用非同步組件無縫替換之,這種靈活性是 Angular 的 loadChildren 根本無法比擬的。比如一個動態的長表單頁面,你甚至可以根據用戶目前的輸入來動態抓取表單接下來的部分(這個用例還是 wepback 的維護者 Sean Larkin 發現並用在生產中的)。
單元測試和集成測試
—— 事實錯誤。vue-cli 的 webpack 模板內置了開箱即用的 Karma + Jasmine 配置,自帶了一個初始測試用例,npm run unit 即可。這又雙一次證明大漠根本沒有跑過vue-cli 生成的項目。
Vue的單測不僅僅支持 Karam + Jasmine - 事實上社區有廣泛的單測反饋,對於 Jest, Ava 都有實踐,我們正在開發中的官方的單測工具庫vue-test-utils (由社區最流行的單測庫 avoriaz 的開發者開發)會進一步簡化常見的組件單測斷言需求,並且還會有和所有主流 test runner 的整合指南。
—— again,事實錯誤。vue-cli 的 webpack 模板內置了開箱即用的 Nightwatch + Selenium E2E 測試配置,自帶了一個初始測試用例,npm run e2e 即可。這又雙叒一次證明大漠根本沒有跑過vue-cli 生成的項目。
—— 集成測試這種東西,有什麼技術門檻可言,還需要抄么?順便說一句,vue-cli 初始化的項目可是早比 @angular/cli 正式發布前就已經自帶集成測試了...