成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

快速構(gòu)建一個(gè)使用axios的vue應(yīng)用程序

william / 3019人閱讀

摘要:要在我們的應(yīng)用程序中顯示模擬數(shù)據(jù),可以在元素中寫入指令用于渲染我們的列表。雖然這超出了本教程的范圍,但建議用于更大或更復(fù)雜的應(yīng)用程序。

這篇文章講述了如何快速構(gòu)建一個(gè)vue程序,并使用axios從遠(yuǎn)程獲取數(shù)據(jù)。
這是原文章的直通門

通常情況下,在構(gòu)建JavaScript應(yīng)用程序時(shí),會(huì)從遠(yuǎn)程獲取數(shù)據(jù)或使用API。我最近研究了一些公用API,發(fā)現(xiàn)有很多很酷的東西可以用在這些獲取到的數(shù)據(jù)上。

我將演示如何構(gòu)建一個(gè)簡(jiǎn)單的新聞app,它將顯示當(dāng)天的熱門新聞,還允許用戶通過感興趣的類別進(jìn)行過濾。我們將從紐約時(shí)報(bào)API獲取數(shù)據(jù)。可以在這里找到本教程的完整代碼。

下面是最終app的效果:

要使用本教程,你將需要了解基本的Vue.js知識(shí)。這是一個(gè)vue教程直達(dá)。教程將使用ES6語法。

項(xiàng)目結(jié)構(gòu)

我們將只用2個(gè)文件來保持項(xiàng)目簡(jiǎn)潔:

./app.js
./index.html

app.js包含整個(gè)app的邏輯,index.html包含整個(gè)app的界面。

我們從index.html開始:



    
        
        最偉大的新聞app
    
    
        

Vue新聞

然后,在index.html的底部,在標(biāo)簽之前,引入Vue.jsapp.js


可選地,可以引入Foundation,以利用一些預(yù)制樣式,使我們的界面看起來更好一點(diǎn)。 將其包含在標(biāo)簽中:

創(chuàng)建一個(gè)簡(jiǎn)單Vue應(yīng)用程序

首先,我們將在元素div#app上創(chuàng)建一個(gè)新的Vue實(shí)例,并使用一些測(cè)試數(shù)據(jù)來模擬新聞API的響應(yīng):

// ./app.js
const vm = new Vue({
    el: "#app",
    data: {
        results: [
            {title: "第一條新聞", abstract: "我是第一條新聞"},
            {title: "接著是第二條", abstract: "我是第二條新聞"},
            {title: "然后是第三條", abstract: "我是第三條新聞"},
            {title: "我是最后一條了", abstract: "我是第四條新聞"}
        ]
    }
});

我們通過el參數(shù)告訴Vue要掛載的元素,并通過data參數(shù)指定我們的app將使用哪些數(shù)據(jù)。

要在我們的應(yīng)用程序中顯示模擬數(shù)據(jù),可以在#app元素中寫入:


{{ result.title }}

{{ result.abstract }}.

v-for指令用于渲染我們的列表。我們還使用雙花括號(hào)來顯示每一個(gè)result的內(nèi)容。

我們現(xiàn)在有一個(gè)基本的布局結(jié)構(gòu)了:

從API獲取數(shù)據(jù)

要使用紐約時(shí)報(bào)API,需要獲得一個(gè)API密鑰。所以如果你沒有的話,點(diǎn)擊這里,注冊(cè)以獲取Top Stories API的API密鑰(注冊(cè)時(shí)API一欄選擇Top Stories API)。

使用Ajax請(qǐng)求和處理響應(yīng)

Axios是一個(gè)基于promise的HTTP客戶端,用于發(fā)送Ajax請(qǐng)求。它提供了簡(jiǎn)單而豐富的API。它與fetch API非常相似,但不需要為舊版瀏覽器添加一個(gè)polyfill,還有一些其他的細(xì)微之處。

引入axios:


現(xiàn)在,一旦我們的Vue應(yīng)用程序掛載(mounted),我們就發(fā)送請(qǐng)求獲取top stories的列表:

// ./app.js
const vm = new Vue({
    el: "#app",
    data: {
        results: []
    },
    mounted() {
        axios.get("https://api.nytimes.com/svc/topstories/v2/home.json?api-key=your_api_key")
        .then(response => {
            this.results = response.data.resultes})
    }
});

注意:將your_api_key替換為之前注冊(cè)獲得的API key。

現(xiàn)在我們可以在我們的主頁上看到新聞列表。不要擔(dān)心不美觀的界面,我們會(huì)在后面處理:

通過Vue Devtools來看看API的響應(yīng):

為了使我們的項(xiàng)目更加整潔,可復(fù)用,我們將做一些小的重構(gòu),并介紹一個(gè)幫助函數(shù)來構(gòu)建我們的URL。 我們還將注冊(cè)getPosts作為我們應(yīng)用程序的一個(gè)方法((將其添加到vue對(duì)象的method參數(shù)中):

// ./app.js
const NYTBaseUrl = "https://api.nytimes.com/svc/topstories/v2/";
const Apikey = "your_api_key";

function buildUrl(url) {
    return NYTBaseUrl + url + ".json?api-key=" + Apikey;
}

const vm = new Vue ({
    el: "#app",
    data: {
        results: []
    },
    mounted () {
        this.getPosts("home");
    },
    methods: {
        getPosts(section) {
            let url = buildUrl(section);
            axios.get(url).then((response) => {
                this.results = response.data.results;
            }).catch(error => {
                console.log(error);
            });
        }
    }
});

我們可以通過引入計(jì)算屬性(computed property)對(duì)API獲得的原始結(jié)果進(jìn)行一些修改,從而對(duì)我們的視圖的外觀進(jìn)行一些更改。

const vm = new Vue ({
    el: "#app",
    data: {
        results: []
    },
    mounted () {
        this.getPosts("home");
    },
    methods: {
        getPosts(section) {
            let url = buildUrl(section);
            axios.get(url).then((response) => {
                this.results = response.data.results;
            }).catch(error => {
                console.log(error);
            });
        }
    },
    computed: {
        processedPosts() {
            let posts = this.results;
            
            //添加image_url屬性
            posts.map(post => {
                let imgObj = post.multimedia.find(media => media.format === "superJumbo");
                post.image_url = imgObj ? imgObj.url : "http://placehold.it/300x200?text=N/A";
            });
            
            //將數(shù)據(jù)分組
            let i, j, chunkedArray = [], chunk = 4;
            for (i = 0, j = 0; i < posts.length; i += chunk, j++) {
                chunkedArray[j] = posts.slice(i, i + chunk);
            }
            return chunkedArray;
        }
    }
});

在上述代碼中,在計(jì)算屬性processedPosts中,我們附加一個(gè)image_url屬性給每個(gè)新聞對(duì)象:
我們通過循環(huán)遍歷API的results,并通過在multimedia數(shù)組中對(duì)單個(gè)元素搜索來查找所需格式的媒體,然后將該媒體的URL賦值給image_url屬性。在媒體不可用的情況下,我們將默認(rèn)圖片地址設(shè)置為來自Placehold.it的圖像。

我們還寫了一個(gè)循環(huán)來將我們的results數(shù)組分為四個(gè)一組,這將會(huì)處理我們前面看到的不美觀界面。

Note: 你也可以使用像Lodash這樣的庫進(jìn)行分塊。

計(jì)算屬性非常適合操縱數(shù)據(jù)。每當(dāng)我們需要將results數(shù)組分組時(shí),我們可以將它定義為一個(gè)計(jì)算屬性,按照我們的意愿使用它,因?yàn)閂ue會(huì)在results改動(dòng)時(shí)自動(dòng)更新processedPosts

計(jì)算屬性也基于它們的依賴關(guān)系進(jìn)行緩存,因此只要results不改變,processedPosts屬性將返回自身的緩存值。這將有助于性能,特別是在進(jìn)行復(fù)雜的數(shù)據(jù)操作時(shí)。

接下來,我們?cè)?b>index.html中修改我們的html標(biāo)簽,以顯示我們的計(jì)算結(jié)果:


{{ post.title }}

{{ post.abstract }}

現(xiàn)在我們的app看起來美觀一些了:

新聞列表組件

組件用于將應(yīng)用程序模塊化?!靶侣劻斜怼笨梢灾貥?gòu)為一個(gè)組件,例如,如果我們的app成長(zhǎng)起來,并且決定在別的地方也使用新聞列表,組件將會(huì)使這變得很容易。

// ./app.js
Vue.component("news-list", {
    props: ["results"],
    template: `
        
{{ post.title }}

{{ post.abstract }}

`, computed: { processedPosts() { //... } } });

在上面的代碼中,我們注冊(cè)了一個(gè)全局組件:
Vue.component(tagName,options)。建議在定義tagName時(shí)使用連字符,這樣它們不會(huì)與標(biāo)準(zhǔn)HTML標(biāo)簽發(fā)生沖突。

我們來簡(jiǎn)單看一下其他幾個(gè)參數(shù):

props:這是一個(gè)我們希望從父作用域傳遞給組件的數(shù)組。 我們傳遞了results,因?yàn)槲覀儚闹鲬?yīng)用程序?qū)嵗虞d組件。

template:在這里我們定義新聞列表的html。注意,我們將列表包裝在

標(biāo)簽中。這是因?yàn)榻M件需要有一個(gè)多帶帶的根元素,而不是多個(gè)元素。

調(diào)整我們的html代碼以使用我們的新聞列表組件,并傳遞results數(shù)據(jù):


Vue新聞

注意:組件也可以創(chuàng)建為單個(gè)文件(.vue文件),然后由構(gòu)建工具(如webpack)解析。雖然這超出了本教程的范圍,但建議用于更大或更復(fù)雜的應(yīng)用程序。

實(shí)現(xiàn)類別過濾

為了使我們的應(yīng)用程序更加豐富,我們現(xiàn)在可以引入類別過濾器,以允許用戶僅顯示某些類別的新聞。

首先,我們注冊(cè)現(xiàn)在應(yīng)用程序里展示的以及即將會(huì)展示的類別列表:

const SECTIONS = "home, arts, automobiles, books, business, fashion, food, health, insider, magazine, movies, national, nyregion, obituaries, opinion, politics, realestate, science, sports, sundayreview, technology, theater, tmagazine, travel, upshot, world";

const vm = new Vue({
    el: "#app",
    data: {
        results: [],
        //設(shè)置展示的類別數(shù)組
        sections: SECTIONS.split(", "),
        //設(shè)置默認(rèn)的展示類別
        section: "home",
    },
    mounted () {
        this.getPosts(this.section);
    },
    //...
});

接下來,我們?cè)?b>div#app容器中添加:


分類

當(dāng)單擊“我要看新聞”按鈕時(shí),觸發(fā)所選分類的getPosts方法。

最終demo

我決定添加一些小的(可選的)交互,使應(yīng)用程序體驗(yàn)更好一些,如引入加載圖像。

可以看看如下效果:
https://codepen.io/mengmengpr...

也可以在此處查看實(shí)時(shí)版本。

結(jié)尾

在本教程中,我們已經(jīng)學(xué)會(huì)了如何從頭開始創(chuàng)建一個(gè)Vue.js項(xiàng)目,如何使用axios從API獲取數(shù)據(jù),以及如何使用組件和計(jì)算屬性去處理數(shù)據(jù)。

現(xiàn)在我們有一個(gè)功能齊全的基于API服務(wù)構(gòu)建的Vue.js 2.0應(yīng)用程序。通過引入其他API可以進(jìn)行大量的改進(jìn)。例如,我們可以:

使用Buffer API從分類中自動(dòng)排列社交媒體。

使用Pocket API標(biāo)記文章稍后閱讀。

等等

該項(xiàng)目的整個(gè)代碼也托管在Github上,因此你可以克隆,運(yùn)行并進(jìn)行改進(jìn)。

這篇文章對(duì)于vue初學(xué)者是一個(gè)不錯(cuò)的教程,它講述了如何快速的搭建起一個(gè)vue應(yīng)用程序,其他詳細(xì)的vue特性,可以去官網(wǎng)學(xué)習(xí)之后基于本項(xiàng)目進(jìn)行改進(jìn)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/111919.html

相關(guān)文章

  • 快速構(gòu)建一個(gè)使用axiosvue應(yīng)用程序

    摘要:要在我們的應(yīng)用程序中顯示模擬數(shù)據(jù),可以在元素中寫入指令用于渲染我們的列表。雖然這超出了本教程的范圍,但建議用于更大或更復(fù)雜的應(yīng)用程序。 這篇文章講述了如何快速構(gòu)建一個(gè)vue程序,并使用axios從遠(yuǎn)程獲取數(shù)據(jù)。這是原文章的直通門 通常情況下,在構(gòu)建JavaScript應(yīng)用程序時(shí),會(huì)從遠(yuǎn)程獲取數(shù)據(jù)或使用API。我最近研究了一些公用API,發(fā)現(xiàn)有很多很酷的東西可以用在這些獲取到的數(shù)據(jù)上。 ...

    TIGERB 評(píng)論0 收藏0
  • vue+axios+mock.js環(huán)境搭建

    摘要:如果你不熟悉也沒關(guān)系,我將一步一步教你如何在前端項(xiàng)目中使用來構(gòu)建一個(gè)模擬假數(shù)據(jù)環(huán)境。例如代表的含義。文件最后將方法暴露出去給具體請(qǐng)求調(diào)用即可具體頁面調(diào)用引入使用處理返回 在前后端分離開發(fā)模式下,前端項(xiàng)目通常在項(xiàng)目構(gòu)建初期需要使用假數(shù)據(jù)以及相應(yīng)的http請(qǐng)求來進(jìn)行輔助開發(fā),例如在后端接口還沒開發(fā)好下,我們可以模擬http請(qǐng)求以及數(shù)據(jù)來進(jìn)行前端的axios封裝,接口設(shè)計(jì),對(duì)http狀態(tài)碼處...

    Chao 評(píng)論0 收藏0
  • vue+node+mysql搭建個(gè)人博客(一)

    摘要:其中用來完成請(qǐng)求,將添加的原型上后就不需要再在每個(gè)需要使用它的頁面引入了每個(gè)頁面都相當(dāng)于一個(gè)組件,文件以結(jié)尾,第一次啟動(dòng)成功時(shí)看到的頁面就是組件,路徑。 學(xué)習(xí)筆記...在線地址:cl8023.com github 數(shù)據(jù)庫已改為mongodb 快速搭建 node 后端服務(wù)Github-quick-node-server 準(zhǔn)備工作 安裝node,這是必須的 新版node自帶npm...

    peixn 評(píng)論0 收藏0
  • vue開發(fā)項(xiàng)目完全指南

    摘要:有兩種方法,一種是在開發(fā)環(huán)境中設(shè)置通過的,另一種是在服務(wù)器上修改的配置設(shè)置。這樣我們以后使用訪問接口就可以不加了,打包后訪問也不用手動(dòng)去除統(tǒng)一管理在項(xiàng)目開發(fā)過程中,會(huì)涉及到很多接口的處理,當(dāng)項(xiàng)目足夠大時(shí),就需要統(tǒng)一管理接口。 這篇文章總結(jié)了vue項(xiàng)目的所遇到的問題,包括跨域、用戶認(rèn)證、接口統(tǒng)一管理、路由配置、兼容性處理,性能優(yōu)化等內(nèi)容。 項(xiàng)目github地址 : 前端 https:...

    leoperfect 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<