1.簡單說下setTimeout(fn,0)中的0代表的是什么?如果我想在vue實現(xiàn)功能可以用什么方法代替屉符?
答: JavaScript 是單線程執(zhí)行的,也就是無法同時執(zhí)行多段代碼。當某一段代碼正在執(zhí)行的時候,所有后續(xù)的任務都必須等待僚焦,形成一個隊列,一旦當前任務執(zhí)行完畢绣的,再從隊列中取出下一個任務叠赐。這也常被稱為 “阻塞式執(zhí)行”。
setTimeout(fn,0): 這個時間設為 0屡江,就代表立即插入隊列芭概,但不是立即執(zhí)行,仍然要等到主線程把"任務隊列"現(xiàn)有的事件都處理完惩嘉,才會得到執(zhí)行罢洲。所以 setTimeout 并不能保證執(zhí)行的時間,是否立即執(zhí)行文黎,取決于 JavaScript 線程是擁擠還是空閑惹苗。
在某種程度上,我們可以利用setTimeout(fn,0)的特性耸峭,修正瀏覽器的任務順序桩蓉。
console.log(1);
setTimeout(function(){
console.log(2);
}, 0);
console.log(3);
執(zhí)行j結果為:1,3劳闹,2
vue異步更新隊列:http://www.reibang.com/p/19efc25e2a57
2.用vue實現(xiàn)樣式綁定院究,可以用class或者內聯(lián)樣式,最少寫出2個本涕?
1. 綁定class–對象語法
為v-bind:class設置一個對象业汰,可以動態(tài)切換class:
<!-- 綁定class-對象語法 -->
<body>
<div id="app">
<!-- 類active依賴于數(shù)據(jù)isActive,當其為true時菩颖,div擁有類名Active -->
<div :class="{'active': isActive}"></div>
<!-- 對象中也可以傳入多個屬性样漆,動態(tài)切換class -->
<!-- <div class="static" :class="{'active':isActive, 'error':isError}"></div> -->
</div>
<script src = "https://unpkg.com/vue/dist/vue.min.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
isActive: true,
isError: false,
},
})
</script>
</body>
當:class的表達式過長或邏輯復雜時,還可以綁定一個計算屬性:
<!-- 綁定class-對象語法-綁定計算屬性 -->
<body>
<div id="app">
<div :class="classes"></div>
</div>
<script src = "https://unpkg.com/vue/dist/vue.min.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
isActive: true,
isError: null,
},
computed: {
classes: function() {
return {
active: this.isActive && !this.error,
'text-fail': this.error && this.error.type === '',
}
}
}
})
</script>
</body>
2. 綁定class–數(shù)組語法
當需要應用多個class時晦闰,可以使用數(shù)組語法放祟,給:class綁定一個數(shù)組,應用一個class列表:
<body>
<div id="app">
<!-- 結果為擁有active與error兩個類名 -->
<div :class="[activeCls, errorCls]"></div>
</div>
<script src = "https://unpkg.com/vue/dist/vue.min.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
activeCls: 'active',
errorCls: 'error',
},
})
</script>
</body>
3. 綁定內聯(lián)樣式
使用:style可以給元素綁定內聯(lián)樣式鹅髓,與:class類似舞竿,也有對象語法和數(shù)組語法。
- 內聯(lián)樣式窿冯,跟一般css添加樣式相似骗奖,多了一個綁定,樣式添加通過數(shù)組方式醒串,數(shù)組中以字符串顯示
<div id='box' :class="['one','two']">{{msg}}</div>
- 數(shù)組中添加三元表達式执桌,只有為true時候才起作用
下邊這種在變換樣式的時候采用,需要另外在data中說明flag的值
<div id='box1' :class=['one','two',flag?'three':'']>{{msg}}這種方法不好讀</div>
三元表達式看著麻煩芜赌,使用對象形式好一點
<div id='box12' :class="['one','two',{three:flag}]">{{msg}}</div>
然后有了下面這兩種形式
<div id='box2' :class="[{oen:true},{two:true},{'three':true}]">{{msg}}</div>
使用對象添加樣式的時候仰挣,對象的屬性是類名,對象的屬性名可以帶引號也可以不帶引號缠沈,屬性的值是標識符,但是如果對象中的 鍵 含有- 則必須給該鍵添加""
<div id="box3" :class = "{one:true, two:true, three :true}">{{mg}} </div>
<div id="box4" :class = mm>{{mg}}</div>
<div id='box5' :style='{color:'red',"font-size":'50px'}'>{{msg}}</div>
<div id="box6" :style='style1'>{{mg}} 一個</div>
<div id="box7" :style='[style1,style2]'>{{mg}}多個的時候要通過數(shù)組的方式</div>
知識點鏈接:https://blog.csdn.net/qq_41813695/article/details/80473264?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase
3.vuex有哪幾種屬性
五種膘壶,state, getters, mutations, actions, modules错蝴。
- state:vuex的基本數(shù)據(jù),用來存儲變量
2. geeter:從基本數(shù)據(jù)(state)派生的數(shù)據(jù)颓芭,相當于state的計算屬性
3. mutation:提交更新數(shù)據(jù)的方法顷锰,必須是同步的(如果需要異步使用action)。每個 mutation 都有一個字符串的 事件類型 (type) 和 一個 回調函數(shù) (handler)亡问。
回調函數(shù)就是我們實際進行狀態(tài)更改的地方官紫,并且它會接受 state 作為第一個參數(shù),提交載荷作為第二個參數(shù)州藕。
4. action:和mutation的功能大致相同束世,不同之處在于 ==》1. Action 提交的是 mutation,而不是直接變更狀態(tài)床玻。 2. Action 可以包含任意異步操作毁涉。
5. modules:模塊化vuex,可以讓每一個模塊擁有自己的state锈死、mutation薪丁、action、getters,使得結構非常清晰馅精,方便管理严嗜。
Vuex的用法:
新建vue項目testApp ==》 在testApp中建store文件 ==》 store文件下又有modules文件夾和getter.js 和 index.js ==》 store文件下建user.js
在項目的main.js中引入 import store from './store'
在store文件下的index.js中引入
import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
import global from './modules/global'
import getters from './getters'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
user
},
getters
})
export default store
在store文件下的getters.js中引入
const getters = {
self: state => state.user.self,
token: state => state.user.token,
currentCommunity: (state, getters) => {
let cid = getters.currentCommunityId
return getters.communities.filter(item => {
return item.communityId === cid
})
}
}
export default getters
在modules文件下的user.js寫代碼
const user = {
state:{
self: null,
token: '',
},
mutations:{
SET_SELF: (state, self) => {
state.self = self
},
SET_TOKEN: (state, token) => {
state.token = token
}
},
actions:{
login ({ commit }, res) {
commit('SET_SELF', res.self)
commit('SET_TOKEN', res.token
}
}
export default user
使用下面這兩種方法存儲數(shù)據(jù):
dispatch:異步操作,寫法: this.$store.dispatch('mutations方法名',值)
commit:同步操作洲敢,寫法:this.$store.commit('mutations方法名',值)
4.在vue.js中實現(xiàn)防止模板渲染時閃爍的方法
在使用vue綁定數(shù)據(jù)的時候漫玄,渲染頁面時會出現(xiàn)變量閃爍
<div id="h_cameraman" v-cloak>
<public-nav>
{{ msg }}
</public-nav>
</div>
加載的時候就會看到 {{msg }}
解決辦法: 給最外層的標簽 加上 v-cloak
css里面:[v-cloak]{
display:none;
}
ps: 有時候可能沒有用 可能是 [v-cloak]{ display:none;} 的層級被覆蓋掉了 , 你需要提高它的層級 [v-cloak]{ display:none !important ;} 压彭,也有可能你把它放進了 @import 引入的css文件中 睦优, 它放在@import引入的文件的是沒有作用的,你可以放在link引入的文件來使用壮不,或者直接寫在頁面的<style></style>標簽中汗盘!
5.垂直居中方案?
6.清除浮動方案
解決方案一:給前面一個父元素設置高度
⊙弧隐孽!企業(yè)開發(fā)中,能不寫高度就不寫健蕊,所以這種方式用得很少
解決方案二:給后面的盒子添加clear屬性菱阵;
缩功!給某個元素添加clear屬性后晴及,這個元素的margin屬性 就會失效
解決方案三:外墻法,在兩個盒子中間添加一個額外的塊級元素嫡锌,并給這個添加的元素設置clear:both屬性虑稼。
琳钉!可以讓下面的盒子使用margin-top屬性,但是上面的盒子margin-bottom屬性失效蛛倦;實際使用時可以直接設置添加的塊級元素的高度槽卫,從而讓上下盒子產生邊距。
解決方案四:內墻法胰蝠,在第一個盒子所有子元素最后添加一個額外的塊級元素,給這個額外的塊級元素設置clear:both屬性震蒋。
∪兹!可以讓第一個盒子使用margin-bottom屬性查剖,也可以讓第二個盒子使用margin-top屬性钾虐。
此時第一個盒子的高度被撐起笋庄,顯示出了背景色效扫。但由于添加了額外的元素,因此在開發(fā)中不推薦使用這種方式直砂。
解決方案五:利用偽元素添加塊級元素清除浮動
解決方案六: overflow:hidden; 1.可以將超出標簽范圍的內容裁剪掉
2.清除浮動
3.兩個嵌套的盒子菌仁,可以讓里面的盒子在設置margin-top時,外邊的盒子不被頂下來静暂。
同時济丘,上面盒子的margin-bottom和下邊盒子的margin-top都可以正常使用。
知識點鏈接:https://www.cnblogs.com/iwilling/p/8485608.html
7.
el的用法
知識點鏈接:https://www.cnblogs.com/hope192168/p/11966104.html
8.vuex中store存儲dispatch和commit的區(qū)別
dispatch: 含有異步操作
存儲:
this.$store.dispatch('initUserInfo',friend);
取值:
this.$store.getters.userInfo;
commit:同步操作
存儲:
this.$store.commit('initUserInfo',friend);
取值:
this.$store.state.userInfo;
9.有一個數(shù)組var arr = [22,12,43,56,4]按照降序排序洽蛀,請寫出實現(xiàn)方法
reverse() 降序摹迷,使用 sort() 對數(shù)組排序
function bubbleSort(arr){
for(var i = 0; i < arr.length - 1; i++){
for(var j = 0; j < arr.length - i - 1; j++){
if(arr[j] < arr[j + 1]){
var tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
10.var array=['dog','racecar','car'],請用一個函數(shù)實現(xiàn)查找一下通用的結尾
知識點鏈接:https://blog.csdn.net/zhangwen809877665/article/details/105647513