vue的探索之路(一)

前言:這次的App項目是由native+H5組合而成桂敛,整個App分為2個模塊,我負責的是商城首頁到生成訂單的一系列頁面以及業(yè)務代碼溅潜,在這里總結一下遇到的問題术唬。第一次寫筆記,多多見諒滚澜。

打包工具

項目采用webpack進行打包粗仓,雖然之前有過一些基礎的接觸,但是這次還是第一次自己嘗試的去配置博秫,稍微補了一下webpack的內容潦牛。

//webpack.config.js
module.exports = {
    entry: {
        ProductDetails:"./src/js/ProductDetails.js",
        Orderdetail:"./src/js/Orderdetail.js",
        Logistics:"./src/js/Logistics.js",
        Index:"./src/js/Index.js",
        ...
    },
    output: {
        path: './dist',
        filename: '[name].js'
    },
     resolve: {
        alias: {
            'vue': 'vue/dist/vue.js',
        }
    }, 
    module: {
        loaders: [
            {
                test: /\.js$/,
                loader: 'babel',
                exclude: /node_modules/
            },
            {
                test: /\.vue$/,
                loader: 'vue'
            },
            {
                test: /\.css$/,
                loader: 'style-loader!css-loader!'
            },
            {
                test: /\.scss$/,
                exclude: /node_modules/,
                loader: 'style-loader!css-loader!sass-loader'
            },
            {
                test: /\.(png|jpg|gif|svg)$/,
                loader: 'url' 
            }
            
        ]
    },
    
}

入口

entry :配置起始文件的路徑眶掌,它可以是數(shù)組挡育,對象,字符串朴爬。在這里我采用了多頁面入口的方式即寒。

輸出

output: path: 配置最終打包完成后的路徑所在;filename:最終打包后文件的名稱召噩,由于是多頁面入口文件母赵,這里為了方便使用[name].js,這樣最終打包出來的文件名稱跟入口文件名稱一致具滴。

加載器

module(loaders):
test:注意是正則表達式凹嘲,不要加引號,匹配要處理的文件

loader:要使用的loader构韵,"-loader"可以省略

include: 把要處理的目錄包括進來

exclude:不需要去處理的目錄周蹭。


與native的交互

  • 目前是通過自定義協(xié)議的方式趋艘,也就是URL,協(xié)商一個通用的協(xié)議比如app.owen://?pushcode=1 ,前端通過location.href凶朗,而native則是通過截取這段URL瓷胧,獲取里面的參數(shù)進行處理。

難點一.

模仿淘寶商品詳情棚愤,雖然不要求完全一樣但是功能基本要一致搓萧。難點就是在商品屬性選擇后價格,庫存,圖片都要改變,到這首先想到的就是Vue中的watch.然后就是每種分類的點擊效果,不沖突宛畦,不重復瘸洛。

demo1.png

demo2.png

這里我想了很久該怎么做才能做到點擊效果的同時又能使用watch監(jiān)控,實現(xiàn)動態(tài)刃永。經過不斷的嘗試我終于找到了方法货矮,通過深入響應式原理了解,只有在data屬性上的js對象都被會vue遍歷再通過Object.definePropery將全部屬性轉換getter/setter斯够,可以通過console.log()查看囚玫,它們在內部行了追蹤依賴,才能實現(xiàn)響應读规。

在這里有個重點抓督,Vue 不允許在已經創(chuàng)建的實例上動態(tài)添加新的根級響應式屬性,也就是說我們只能動態(tài)添加在已存在的根級屬性中束亏,我在Vue創(chuàng)建了根級屬性iscur

    data: {
        iscur: {},//當前的商品子屬性attrid
    }  
    

可以通過this.$set(this.iscur,'b',2),但是如果新添加的新屬性在改變后并不會觸發(fā)更新怎么辦,這里是采用this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 }),創(chuàng)建一個新的對象铃在,讓它包含原對象的屬性和新的屬性。

言歸正傳碍遍,通過請求獲取分類數(shù)據(jù)定铜,這里我通過遍歷父分類怕敬,給iscur動態(tài)添加屬性,

            this.arrts.forEach( (val, index)=> {              
                    var attrsId = {
                        //設置子分類attrid
                        ['type' + index]: ""
                    }
                    ....
                    this.iscur = Object.assign({}, this.iscur, attrsId) //實現(xiàn)data響應
                    ....              
                })

可以看到iscur 中的屬性畸陡,


demo3.png

在看看HTML處:

//父分類
<div class="attr" v-for="(attr,findex) in arrts">
   <h1 >{{attr.attrname}}</h1>
   <ul :id="attr.attrid">
          //子分類
          <li  v-for="(item,index) in attr.attrValueList" 
           :class="{active:iscur['type'+findex]==item.attrid}"         
           v-on:click="actives($event,findex,item.attrid)"                   
          >{{item.attrname}}</li>                   
   </ul>
</div>

首先分類信息會有兩次遍歷,首先遍歷出父分類虽填,再遍歷子分類丁恭,其中:class="{active:iscur['type'+findex]==item.attrid}是判斷當前父分類下選中的是哪個子分類id斋日。v-on:click="actives($event,findex,item.attrid)點擊子分類時將父分類的id和子分類的id傳入

 actives: function (e, findex, attrid) {   
            this.iscur['type' + findex] = attrid;
        }

最后使用watch監(jiān)控iscur對象,在每次點擊后恶守,iscur就會發(fā)生改變第献,從而執(zhí)行handler跛蛋,
在其中執(zhí)行對比sku,更換價格痊硕,圖片,以及庫存理逊。

iscur: {
            /*
            監(jiān)控 iscur 對象
            當iscur中屬性發(fā)生變化時盒揉,我們獲取iscur中每個屬性的value值,再與價格表中的數(shù)據(jù)進行對比,提取出相同項的數(shù)據(jù)
            */

            handler: function (val) {

                // do  something 
            },
            // 深度觀察
            deep: true
        },

難點二.

這種類分頁:

demo5.png

最開始做的時候也最簡單刚盈,上面部分橫向導航欄,下面展示商品欲侮,每次點擊分類時候去請求相應的數(shù)據(jù)肋联,替換掉展示商品部分的數(shù)據(jù),這樣的結果就是出現(xiàn)重復請求數(shù)據(jù)橄仍,體驗也差。之后想試著優(yōu)化這部分虑粥,看了主流app類似這種分類頁效果,就是點擊子分類娩贷,如果是第一次則加載數(shù)據(jù)斋射,否則就顯示數(shù)據(jù)但荤,再次點擊分類的時候刷新。
思路:首先我在data中設置一個屬性productlist專門用來存放數(shù)據(jù)腹躁,默認值設置為一個空數(shù)組 ,在子分類成功后執(zhí)行setModels方法

setModels: function (datas) { 
            /**
             * 初始化productlist的數(shù)據(jù)結構
             * 根據(jù)分類數(shù)據(jù)遍歷后分別添加obj哑了,用來存放數(shù)據(jù)
             */

            datas.forEach((value, index) => {
                var obj = {
                    brandid: value.brandid,
                    list: []
                }
                this.productlist.push(obj)
            })
        },

通過這個方法,productlist擁有了跟分類相同個數(shù)對象弱左,之后每次點擊子分類后去請求商品列表,然后遍歷每個數(shù)據(jù)push到相應obj的list數(shù)組中跳夭,這樣就保存了數(shù)據(jù)们镜。當然點擊時候還需要一個方法去判斷什么時候去請求。

 cacheData: function (index,brandid) {
            /**
             * 通過index知道分類的索引號模狭,獲取數(shù)據(jù)
             * 如果list的長度為0,代表無數(shù)據(jù)贩汉,則去請求數(shù)據(jù)
             */   
            var indexdata=this.productlist[index]
            if(indexdata.list.length==0){
                this.getlistdata(brandid)
            }else{
                return false
            }
            
        },

Tips

this.$nextTick(function(){
//dom更新
})

這個方法通常是我們需要運用到dom時候調用的锚赤,比如swiper,js 在獲取圖片數(shù)據(jù)后,實例化swiper必須在該回調函數(shù)內執(zhí)行才有效策菜。獲取一些其他第三方插件需要操作dom節(jié)點酒贬,獲取邊距等都需要在回調函數(shù)內執(zhí)行又憨。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蠢莺,一起剝皮案震驚了整個濱河市零如,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌考蕾,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚯窥,死亡現(xiàn)場離奇詭異,居然都是意外死亡巍沙,警方通過查閱死者的電腦和手機荷鼠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來允乐,“玉大人,你說我怎么就攤上這事敞临◆锢剑” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵编矾,是天一觀的道長馁害。 經常有香客問我,道長碘菜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任仰坦,我火速辦了婚禮计雌,結果婚禮上,老公的妹妹穿的比我還像新娘凿滤。我一直安慰自己,他們只是感情好眷蚓,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布鹃祖。 她就那樣靜靜地躺著,像睡著了一般校读。 火紅的嫁衣襯著肌膚如雪祖能。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天养铸,我揣著相機與錄音,去河邊找鬼兔甘。 笑死鳞滨,一個胖子當著我的面吹牛,可吹牛的內容都是我干的拯啦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼唁情,長吁一口氣:“原來是場噩夢啊……” “哼甫匹!你這毒婦竟也來了?” 一聲冷哼從身側響起兵迅,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤喷兼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后季惯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡贾漏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年纵散,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伍掀。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖濒蒋,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情把兔,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布围橡,位于F島的核電站缕贡,受9級特大地震影響,放射性物質發(fā)生泄漏善绎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一炬守、第九天 我趴在偏房一處隱蔽的房頂上張望剂跟。 院中可真熱鬧,春花似錦曹洽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阐斜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谒出,已是汗流浹背邻奠。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工碌宴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唧喉。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓忍抽,卻偏偏與公主長得像董朝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子子姜,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內容