Lala Code

Lala 的前端大補帖,歡迎一起鑽研前端技術😊

0%

非同步處理 Axios

使用 Axios 取得 API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const { onMounted } = Vue;
const app = {
setup() {
onMounted(() => {
// 在DOM元素渲染完成後執行
axios
.get("https://vue-lessons-api.herokuapp.com/photo/list")
.then((res) => {
console.log(res.data);
});
});
return {};
},
};

Axios 渲染資料

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div class="box">
<div>
<img
v-for="(item, i) in imgArray.arr"
:key="item.url"
v-show="ImgIdx === i"
class="img"
:src="item.url"
/>
</div>
<div class="btnbox">
<a href="javascript:;" @click="ImgIdxRemove">上一張</a>
<a href="javascript:;" @click="ImgIdxAdd">下一張</a>
</div>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const { onMounted, reactive, ref } = Vue;
const app = {
setup() {
const imgArray = reactive({ arr: [] }); // 將取得的資料放進陣列
const ImgIdx = ref(0); // 圖片索引
const ImgIdxAdd = () => {
ImgIdx.value++;
if (ImgIdx.value > imgArray.arr.length - 1) {
ImgIdx.value = 0; // 大於總數量時返回第一張
}
};
const ImgIdxRemove = () => {
ImgIdx.value--;
if (ImgIdx.value < 0) {
ImgIdx.value = imgArray.arr.length - 1; //小於0時返回最後一張
}
};
onMounted(() => {
axios
.get("https://vue-lessons-api.herokuapp.com/photo/list")
.then((res) => {
imgArray.arr = res.data;
});
});
return { imgArray, ImgIdx, ImgIdxAdd, ImgIdxRemove };
},
};

加入 loading 效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div class="box" v-if="isLoad">
<div>
<img
v-for="(item, i) in imgArray.arr"
:key="item.url"
v-show="ImgIdx === i"
class="img"
:src="item.url"
/>
</div>
<div class="btnbox" v-if="isLoad">
<a href="javascript:;" @click="ImgIdxRemove">上一張</a>
<a href="javascript:;" @click="ImgIdxAdd">下一張</a>
</div>
</div>
<img v-if="!isLoad" class="load" src="./images/load.gif" alt="" />
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const imgArray = reactive({ arr: [] }); // 將取得的資料放進陣列
const ImgIdx = ref(0);
const isLoad = ref(false);
const ImgIdxAdd = () => {
ImgIdx.value++;
if (ImgIdx.value > imgArray.arr.length - 1) {
ImgIdx.value = 0; // 大於總數量時返回第一張
}
};
const ImgIdxRemove = () => {
ImgIdx.value--;
if (ImgIdx.value < 0) {
ImgIdx.value = imgArray.arr.length - 1; //小於0時返回最後一張
}
};

const handImgLoad = (imgArr) => {
let i = 0; // 透過i記錄loading跑完沒
imgArr.forEach((image) => {
const newImage = new Image(); // 建立Image實體
newImage.src = image.url; // 透過src去觸發onload事件
newImage.onload = () => {
i++;
if (imgArr.length === i) {
//圖片跑完後執行
imgArray.arr = imgArr;
isLoad.value = true;
}
};
});
};

onMounted(() => {
axios.get("https://vue-lessons-api.herokuapp.com/photo/list").then((res) => {
handImgLoad(res.data);
});
});
return { imgArray, ImgIdx, isLoad, ImgIdxAdd, ImgIdxRemove };

以上是我的學習筆記,希望也有幫助到你哦 😀



🚀實體工作坊分享

玩轉 Web頁面的前端技術(HTML/CSS/JS) 一日體驗課

最近時賦學苑開了實體體驗課,即使你對程式碼沒有概念也能上手!Lala 會帶你一起做出一個個人品牌形象網站,帶你快速了解前端的開發流程,快跟我們一起玩轉 Web 吧!



🚀線上課程分享

線上課程可以加速學習的時間,省去了不少看文件的時間XD,以下是我推薦的一些課程
想學習更多關於前後端的線上課程,可以參考看看。

Hahow

Hahow 有各式各樣類型的課程,而且是無限次數觀看,對學生或上班族而言,不用擔心被時間綁住



六角學院

如果你是初學者,非常推薦六角學院哦!
剛開始轉職也是上了六角的課,非常的淺顯易懂,最重要的是,隨時還有線上的助教幫你解決問題!


Udemy

Udemy 裡的課程非常的多,品質普遍不錯,且價格都滿實惠的,CP值很高!
也是很多工程師推薦的線上課程網站。
❤️