国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Vue實戰—評價組件的設計與實現(6)

cocopeak / 3561人閱讀

摘要:本篇文章我們進一步深入項目設計評價組件。使得組件更加便于維護。路徑配置內自動補全設置通過重命名設置對組件導入模塊時進行了重命名。全部有圖點評使用引入的組件組件就是上圖標記的分隔線。

在上篇文章我們將項目頭部模塊進行了編寫與數據渲染。

本篇文章我們進一步深入項目設計評價組件。

分析頁面

如圖所示,點菜,評價,商家,為導航,我們點擊評價的時候,直接跳轉評價頁面。

評價頁面由商家評分一欄,評論列表構成,評論列表支持:全部,有圖,點評三種篩選。

綜上我們現在開始設計評論組件:

建立組件文件夾

1.css圖片的存放

針對組件引用的圖片可能產生變動性,我們將組件內的圖片放入組件文件夾內,進行引用。使得組件更加便于維護。

2.路徑配置

build/webpack.base.conf.js內:

alias: {
    "vue$": "vue/dist/vue.esm.js",//自動補全設置
    "@": resolve("src"),
    "components": resolve("./src/components")
}

通過alias重命名設置對組件導入模塊時進行了重命名。

實際在導入需要的組件寫法:

// 舉個例子,導入Ratings組價可以寫成
    import Ratings from "components/Ratings/Ratings"

圖片存放,路徑配置完成以后我們建立Ratings文件夾并進入:

根據分析頁面結構整理以后所以我們先把頁面結構搭建出來:

在Ratings.vue中:

//設置容器存放評論組件

現在我們設計商家評分,口味,包裝,等結構如下圖:

{{ratings.comment_score}}

商家評分

口味 {{ratings.quality_score}}
包裝 {{ratings.pack_score}}

{{ratings.delivery_score}}

配送評分

實現評論中選項卡(全部,有圖,點評),列表頁面:

{{ratings.tab[0].comment_score_title}} {{ratings.tab[1].comment_score_title}} {{ratings.tab[2].comment_score_title}}
0}"> {{item.content}}{{item.label_count}}
//評論列表
  • {{comment.user_name}}
    {{fotmatDate(comment.comment_time)}}
    評分

結構搭建完成,下面我們為組件傳入對應的數據。

父子組件通信

Ratings.vue

導入依賴的子組件:





    //設置選項卡變量
    const ALL = 2; // 全部 
    const PICTURE = 1; // 帶圖片
    const COMMENT = 0; // 點評

下面我們開始初始化data,在created鉤子內發起請求。

ratings數據部分展示:

   
    export default {
        data() {
            return {
                ratings: {},//存放請求到的數據
                selectType: ALL,//默認展示全部
            }
        },
        created() {
            // 通過axios發起get請求
            let that = this;
            this.$axios.get("/api/ratings")
                .then(function(response) { // 獲取到數據
                    var dataSource = response.data;
                    if(dataSource.code == 0) {
                        that.ratings = dataSource.data;//將請求到的數據引用到data()中
                        // 初始化滾動
                        that.$nextTick(() => {
                            if(!that.scroll) {
                                that.scroll = new BScroll(that.$refs.ratingView, {
                                    click: true
                                });
                            } else {
                                that.scroll.refresh();
                            }
                        });
                    }

                })
                .catch(function(error) { // 出錯處理
                    console.log(error);
                });
        }
    }
    

注意$refs與設置容器中的ref="ratingView"我們用BScroll來操作dom,所以使用了vue的ref API

https://cn.vuejs.org/v2/api/#ref

        methods: {
            selectTypeFn(type) {
                this.selectType = type;

                // 刷新操作
                this.$nextTick(() => {
                    this.scroll.refresh();
                });
            },
            fotmatDate(time) {
                let date = new Date(time * 1000);

                // 時間格式
                let fmt = "yyyy.MM.dd";

                if(/(y+)/.test(fmt)) { // 年
                    let year = date.getFullYear().toString();
                    fmt = fmt.replace(RegExp.$1, year);
                }
                if(/(M+)/.test(fmt)) { // 月
                    let mouth = date.getMonth() + 1;
                    if(mouth < 10) {
                        mouth = "0" + mouth;
                    }
                    fmt = fmt.replace(RegExp.$1, mouth);
                }
                if(/(d+)/.test(fmt)) { // 日
                    let mydate = date.getDate();
                    if(mydate < 10) {
                        mydate = "0" + mydate;
                    }
                    fmt = fmt.replace(RegExp.$1, mydate);
                }

                return fmt;
            },
            commentStr(content) {
                let rel = /#[^#]+#/g;
                return content.replace(rel, "$&");
            }
        }

在methods中我們定義:

selectTypeFn(type) 在template中點擊事件執行的切換函數;

fotmatDate(time)設置時間展示格式函數;

commentStr(content)插入文本函數;

注意selectTypeFn函數內在我們點擊對應的選項卡后使用 $nextTick()條用scroll刷新列表;

$nextTick()https://cn.vuejs.org/v2/guide...

通過計算屬性將數據傳入class為rating-list模板中:

selectType的值決定了評論列表展示的數據內容

需要再次注意方法與計算屬性調用方法等區別,之前我們對比過,需要詳細了解,還請閱讀之前文章,或官方文檔。

        computed: {
            selectComments() {
                if(this.selectType == ALL) { // 全部
                    return this.ratings.comments;
                } else if(this.selectType == PICTURE) { // 有圖
                    let arr = [];
                    this.ratings.comments.forEach((comment) => {
                        if(comment.comment_pics.length) {
                            arr.push(comment);
                        }
                    });
                    return arr;
                } else { // 點評
                    return this.ratings.comments_dp.comments;
                }
            }
        },

使用引入的組件:

        components: {
            Star,
            Split,
            BScroll
        }


Split組件就是上圖標記的分隔線。

星級評分的邏輯實現

新建Star文件

星星展示形式為 全星,半星,無星 通過for循環搭建好star結構:




通過props接受父組件傳來的score值,并在star內使用,

通過計算屬性對star內的score進行處理,


到此我們從評價組件的頁面分析,拆出了合理的模板結構,接著配置圖片,組件引用的路徑,節省了我們在開發中的時間,最后也是最重要的是數據的渲染,以及星級評分的實現。過程中,我們再次加深對vue的props,methods,computed,$nextTick()等理解。

以上就是本篇全部內容,下篇我們將會細化商品展示頁面,我們下篇見。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104871.html

相關文章

  • Java學習必備書籍推薦終極版!

    摘要:實戰高并發程序設計推薦豆瓣評分書的質量沒的說,推薦大家好好看一下。推薦,豆瓣評分,人評價本書介紹了在編程中條極具實用價值的經驗規則,這些經驗規則涵蓋了大多數開發人員每天所面臨的問題的解決方案。 很早就想把JavaGuide的書單更新一下了,昨晚加今天早上花了幾個時間對之前的書單進行了分類和補充完善。雖是終極版,但一定還有很多不錯的 Java 書籍我沒有添加進去,會繼續完善下去。希望這篇...

    Steve_Wang_ 評論0 收藏0
  • Vue實戰—路由輕松設置vue-router(3)

    摘要:決定將組建渲染在哪,打開,添加配置路由打開文件夾下引入各個組件配置路由路徑組件路由重定向我們在數組設定為。官方文檔注意,當前激活導航設置方法固定屬性值。所以使用保留組件狀態,避免重新渲染購物車的數據丟失。 上篇我們說了vue項目的目錄設計,本篇我們來學習一下vue路由。 路由的作用: 在web端路由(route)就是URL到函數的映射,vue的router就像一個容器,分配,處理每一個...

    timger 評論0 收藏0
  • Vue實戰—如何細化Vue項目目錄設計(2)

    摘要:接下來我們進一步細化項目的目錄設計在開發項目的時候前端避免不了請求后端接口。項目的核心文件目錄中的文件會被處理解析為模塊依賴,更換頻率不高的菜單背景圖片,按鈕等可放置在內。總結項目目錄設計可以根據實際具體需求變動,但是我們結構化去思考。 通過上一篇文章我們了解了Vue項目核心文件(src)以及在內的各個文件的職能。 接下來我們進一步細化Vue項目的目錄設計: 在開發項目的時候前端避免...

    thekingisalwaysluc 評論0 收藏0
  • 1月份前端資源分享

    摘要:更多資源請文章轉自月份前端資源分享視頻前端技術論壇融合不可錯過的迷你庫測試框架實例教程為你詳細解讀請求頭的具體含意解析的庫如果要用前端框架,開發流程是怎樣的與有什么區別正確使用的方法是什么流程圖插件小如何讓元素只能輸入純文本前端技術中 更多資源請Star:https://github.com/maidishike... 文章轉自:https://github.com/jsfront...

    solocoder 評論0 收藏0
  • 3月份前端資源分享

    摘要:面試如何防騙一份優秀的前端開發工程師簡歷是怎么樣的作為,有哪些一般人我都告訴他,但是他都不聽的忠告如何面試前端工程師 更多資源請Star:https://github.com/maidishike... 文章轉自:https://github.com/jsfront/mo... 3月份前端資源分享 1. Javascript 使用judge.js做信息判斷 javascript...

    nanchen2251 評論0 收藏0

發表評論

0條評論

cocopeak

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<