再次與vue接觸的填坑之路

1. vue中引入json數(shù)據(jù)

必須創(chuàng)建服務(wù)才可以在vue中直接使用json數(shù)據(jù)哎迄;

可參考vue請(qǐng)求本地?cái)?shù)據(jù)

下面就本次使用再清晰理一遍:

方法一:

在webpack.dev.conf.js中(vue-cli實(shí)現(xiàn)的vue項(xiàng)目框架已經(jīng)加上理express)操灿,直接引入json文件入录,然后在devServer中加上get或者post請(qǐng)求锹漱,然后就可以在vue中正常請(qǐng)求此服務(wù)上產(chǎn)生的數(shù)據(jù)了:

WX20180723-110139.png
var beijingData = require('../beijing.json')

before(app) {
    app.get('/api/beijingData', (req, res) => {
      res.json({
        errno: 0,
        data: beijingData
      })//接口返回json數(shù)據(jù)担汤,上面配置的數(shù)據(jù)seller就賦值給data請(qǐng)求后調(diào)用
    })
}

方法二:

平時(shí)我習(xí)慣mock.js產(chǎn)生假數(shù)據(jù)睦擂,所以可以用mock的服務(wù)來(lái)處理json,同樣的在vue中就可以正常請(qǐng)求到了贯钩。

WX20180723-110606.png
var Mock = require('mockjs');
var beijingdata = require('./beijing.json');
var beijingdata1 = require('./beijing2.json');

Mock.mock('/sinotans/order/leftChart', 'get', function (options) {
    return {
        message: 'success',
        data: { orderNum: beijingdata, goodsAmount: beijingdata1 },
        statusCode: 200
    };
});

2. vue router-link上添加點(diǎn)擊事件女嘲。

需要添加.native

 <ul v-if="isShow">
    <router-link :to="headNavLink[index]"
        v-for="(item,index) in headNavList"
        :key="index"
        tag="li"
        @click.native="activeChange(index)">
        <div class="nav-icon"></div>
        <span class="nav-font">{{item}}</span>
    </router-link>
</ul>

3. vue中 watch對(duì)象或者數(shù)組

vue 實(shí)戰(zhàn)問(wèn)題-watch 數(shù)組或者對(duì)象

數(shù)組和對(duì)象都需要深層次監(jiān)測(cè):

data () {
    return {
        orderTotal: {
            businessSel: '1',
            companySel: '全部',
            projectSel: '全部',
            customerSel: '全部',
            flowFrom: '全部',
            flowTo: '全部'
        },
    }
},
watch: {
    orderTotal: {
        handler(newValue, oldValue) {
            console.log(newValue)
            const businessSelectedw = newValue.businessSel;
            const companySelectedw = newValue.companySel;
            const customerSelectedw = newValue.customerSel;
            const projectSelectedw = newValue.projectSel;
            // 監(jiān)聽(tīng) 
            if (companySelectedw === '全部') {
                this.projectDisabled = true;
                this.customerDisabled = true;
            } else {
                this.projectDisabled = false;
                this.customerDisabled = false;
            }
            // 監(jiān)聽(tīng) 
            if ((customerSelectedw !== '全部' && Number(businessSelectedw) === 2) || (projectSelectedw !== '全部' && Number(businessSelectedw) === 1)) {
                this.flowShowFlag = true;
            } else {
                this.flowShowFlag = false;
            }
        },
        deep: true
    }
},

如果想監(jiān)測(cè)具體的屬性變化畜份,如pokerHistory變化時(shí),才執(zhí)行handler函數(shù)欣尼,則可以利用計(jì)算屬性computed做中間層爆雹。

data() {
  return {
    bet: {
      pokerState: 53,
      pokerHistory: 'local'
    }   
    }
},
computed: {
  pokerHistory() {
    return this.bet.pokerHistory
  }
},
watch: {
  pokerHistory(newValue, oldValue) {
    console.log(newValue)
  }
}

4. vue-router多重包含的重定向問(wèn)題

問(wèn)題描述:


WX20180723-124014@2x.png

我的頁(yè)面結(jié)構(gòu)是這樣的。當(dāng)時(shí)的問(wèn)題是:在點(diǎn)擊四個(gè)子頁(yè)面的時(shí)候愕鼓,內(nèi)容頁(yè)一那一層的.router-link-active就沒(méi)了钙态。后來(lái)發(fā)現(xiàn)是因?yàn)槲业膬?nèi)容頁(yè)和子頁(yè)面寫(xiě)在同一級(jí)別上了(怎么說(shuō)才對(duì)呢————就是我的頁(yè)面一進(jìn)入內(nèi)容頁(yè)一后我需要直接展示子頁(yè)面一,而我的內(nèi)容頁(yè)一和子頁(yè)面一的路由寫(xiě)成了一樣的菇晃,這樣就導(dǎo)致子頁(yè)面和內(nèi)容頁(yè)一在同一個(gè)里面了册倒。所以就點(diǎn)擊子頁(yè)面時(shí),.router-link-active就只有一個(gè)了磺送。在內(nèi)容頁(yè)一二上沒(méi)有了)驻子。解決辦法就是內(nèi)容頁(yè)一給一個(gè)路由,然后重定向到子頁(yè)面一上估灿。

同時(shí)在的子頁(yè)面二點(diǎn)擊按鈕處還分為了子頁(yè)面21和子頁(yè)面22

export default new Router({
    routes: [
        {
            path: "/",
            redirect: "/index"
        },
        {
            path: "/index",
            component: home
        },
        {
            path: "/pages1",
            redirect: "/pages/childPage1",
        },
        {
            path: "/pages1",
            name: "visualization",
            component: visual,
            children: [
                {
                    path: "/visual/childPage1",
                    name: "orderNumAnaly",
                    component: orderNumAnaly
                },
                {
                    path: "/visual/childPage2",
                    redirect: "/visual/KPI/log",
                },
                {
                    path: "/visual/childPage2/childPage21",
                    name: "KPILog",
                    component: effectKPILog
                },
                {
                    path: "/visual/childPage2/childPage22",
                    name: "effectKPIWater",
                    component: effectKPIWater
                },
                {
                    path: "/visual/childPage3",
                    name: "transWrongAnaly",
                    component: transWrongAnaly
                },
                {
                    path: "/visual/childPage4",
                    name: "visualAbility",
                    component: visualAbility
                }
            ]
        },
        {
            path: "/pages2",
            name: "lot",
            component: lot
        }
    ]
});

5. amcharts 插件在vue中使用

amcharts必須全局引用崇呵,必須在main.js中引用:

官網(wǎng)上的說(shuō)明

/* eslint-disable */
import AmCharts from 'amcharts3';
import AmSerial from 'amcharts3/amcharts/serial';
import AmPieChart from 'amcharts3/amcharts/pie';
/* eslint-enable */

Using amCharts with Vue.js and Webpack

文章最后面說(shuō)的圖標(biāo)無(wú)法顯示的問(wèn)題,如下添加即可:

WX20180723-124840.png

6. vue中父組件向路由頁(yè)傳遞值

一開(kāi)始沒(méi)明白過(guò)來(lái)router-view上面也可以如同平常組件那樣傳遞props值馅袁。所以走了很多彎路域慷。
在此標(biāo)記:

<router-view :companyOptions="companyOp"></router-view>

7. props傳過(guò)來(lái)的值作為初始值,后續(xù)怎么改變

需求是不需要改變父組件的,只是在父組件中統(tǒng)一請(qǐng)求到了初始值犹褒,每個(gè)組件中的初始值相同抵窒,但后續(xù)會(huì)不同。

哎呀這次真的被自己坑了:

一開(kāi)始的思路是知道props不能直接改變的化漆,那就用computed寫(xiě)一個(gè)新變量來(lái)接收它估脆,然后在方法中改變它,報(bào)錯(cuò)沒(méi)有setter座云,設(shè)置setter不起作用,要不就報(bào)錯(cuò)不能修改props朦拖,懵了璧帝;

問(wèn)了同事后,才發(fā)現(xiàn)簡(jiǎn)單問(wèn)題想復(fù)雜了锣夹。實(shí)際上一開(kāi)始只需要拿到就行了苏潜。

data () {
    return {
        op: this.propsValue
    }
},
props: ['propsValue'],
methods: {
    changeOp () {
        this.op = '12334';
    }
}

8. 畫(huà)圖實(shí)現(xiàn)的對(duì)象上的綁定方法操作本頁(yè)面數(shù)據(jù)

問(wèn)題:
畫(huà)圖的代碼在另一個(gè)js中封裝恤左,本vue中引入js,請(qǐng)求之后調(diào)用函數(shù)生成myChart對(duì)象戳气,即圖表對(duì)象瓶您。此時(shí)需要在其上綁定事件蹄皱。

由于請(qǐng)求是異步執(zhí)行巷折,所以要考慮保證綁定事件在畫(huà)圖之后。

思路一
如果在本.vue中等待其后綁定油吭,那么就要使畫(huà)圖代碼中return 出去

//setChart.js
import echarts from "echarts";

export default function(data, id) {
    let myChart = echarts.init(document.getElementById(id));
    let option = {};
    myChart.setOption(option);
    window.onresize = myChart.resize;
    return myChart;
};

在.vue頁(yè)面:

import myChart from '@/charts/setChart';



mounted () {
    this.utils.MlTools.reqCharts('/sinotans/order/rightChart', 'myChartInit', this.proDym, this)//發(fā)起請(qǐng)求畫(huà)圖
},

methods: {
    myChartInit () {
        let data = this.proDym;
        let _this = this;
        myChart(data, "RightChart").on('click', function (params) {
            if (params.componentType === 'series') {
                // 點(diǎn)擊到了 markPoint 上
                if (params.seriesIndex === 1 || params.seriesIndex === 0) {
                    _this.tabActive = 1;
                    _this.busCarrier.projectSel = _this.proDym.projectSel;
                    _this.busCarrier.carrierSel = '全部';
                }
            }
        });
    },
}

思路二:傳入回調(diào)函數(shù)

//setChart.js
import echarts from "echarts";

export default function(data, id, callback) {
    let myChart = echarts.init(document.getElementById(id));
    let option = {};
    myChart.setOption(option);
    window.onresize = myChart.resize;
    myChart.on('click', function(params){
         if (params.componentType === 'series') {
            callback();
         }
    })
};

在.vue中:

import myChart from '@/charts/setChart';


mounted () {
    this.utils.MlTools.reqCharts('/sinotans/order/rightChart', 'myChartInit', this.proDym, this)//發(fā)起請(qǐng)求畫(huà)圖
},

methods: {
    myChartInit () {
        let data = this.proDym;
        myChart(data, "RightChart", this.changeToShip)
    },
    changeToShip () {
        this.tabActive = 1;
        this.busCarrier.projectSel = this.proDym.projectSel;
        this.busCarrier.carrierSel = '全部';
    }
}

9. 后臺(tái)接收不到數(shù)據(jù)之content-type

form的enctype屬性為編碼方式歌豺,常用有兩種:application/x-www-form-urlencoded和multipart/form-data类咧,默認(rèn)為application/x-www-form-urlencoded蟹腾。

當(dāng)action為get時(shí)候,瀏覽器用x-www-form-urlencoded的編碼方式把form數(shù)據(jù)轉(zhuǎn)換成一個(gè)字串(name1=value1&name2=value2...)值戳,然后把這個(gè)字串追加到url后面炉爆,用?分割芬首,加載這個(gè)新的url。

當(dāng)action為post時(shí)候郁稍,瀏覽器把form數(shù)據(jù)封裝到http body中艺晴,然后發(fā)送到server封寞。 如果沒(méi)有type=file的控件狈究,用默認(rèn)的application/x-www-form-urlencoded就可以了。 但是如果有type=file的話抖锥,就要用到multipart/form-data了磅废。

當(dāng)action為post且Content-Type類型是multipart/form-data拯勉,瀏覽器會(huì)把整個(gè)表單以控件為單位分割竟趾,并為每個(gè)部分加上Content-Disposition(form-data或者file),Content-Type(默認(rèn)為text/plain),name(控件name)等信息岔帽,并加上分割符(boundary)犀勒。

原生AJAX的POST請(qǐng)求如果不指定請(qǐng)求頭Request Header贾费,默認(rèn)使用的Content-Type是text/plain;charset=UTF-8逾一,參數(shù)出現(xiàn)在Request payload塊。

一般json數(shù)據(jù)格式的話箱玷,瀏覽器處就顯示的是Content-Type:application/json;chartset=UTF-8

vue中的axios傳參方式是request payload,參數(shù)格式是json锡足,而并非用的是form傳參壳坪,所以在后臺(tái)用接收f(shuō)orm數(shù)據(jù)的方式接收參數(shù)就接收不到了爽蝴。

解決辦法:

安裝 qs : npm install qs --save

import qs from "qs";
axios({
   method: "post",
   url: param.url,
   dataType: "json",
   data: qs.stringify(param.data),
   headers: {
       "Content-Type": "application/x-www-form-urlencoded"
   },
}).then(res => {
  
}, err => {
   
});

10. axios 實(shí)現(xiàn)某些請(qǐng)求的攔截, 不是全局統(tǒng)一攔截

生成實(shí)例:

static reqCharts(urls, d, datas, _this, loading) {
        let instance = axios.create();
         // 添加請(qǐng)求攔截器
        instance.interceptors.request.use(function(config) {
            // 在發(fā)送請(qǐng)求之前做些什么
            _this[loading] = true;
            return config;
        }, function(error) {
            // 對(duì)請(qǐng)求錯(cuò)誤做些什么
            return Promise.reject(error);
        });
        // 添加響應(yīng)攔截器
        instance.interceptors.response.use(function(response) {
            // 對(duì)響應(yīng)數(shù)據(jù)做點(diǎn)什么
            _this[loading] = false;
            return response;
        }, function(error) {
            // 對(duì)響應(yīng)錯(cuò)誤做點(diǎn)什么
            return Promise.reject(error);
        });

       
        return new Promise((resolve, reject) => {
            instance
                .post(urls, datas)
                .then(function(res) {
                    // 處理res
                })
                .catch (function(err) {
                    console.log(err.response)
                })
            })
    }

11. axios設(shè)置請(qǐng)求超時(shí)九孩,mock服務(wù)下需要設(shè)置发框,否則不起作用梅惯。

12. vue起服務(wù)自動(dòng)用ip

在config/index.js中,添加:

const ip = require('ip').address();
....
host: ip
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末她君,一起剝皮案震驚了整個(gè)濱河市犁河,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宾符,老刑警劉巖灭翔,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哄褒,居然都是意外死亡煌张,警方通過(guò)查閱死者的電腦和手機(jī)骏融,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門怀泊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人霹琼,你說(shuō)我怎么就攤上這事枣申∨炊” “怎么了泊窘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵烘豹,是天一觀的道長(zhǎng)携悯。 經(jīng)常有香客問(wèn)我憔鬼,道長(zhǎng),這世上最難降的妖魔是什么昌跌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任蚕愤,我火速辦了婚禮饺蚊,結(jié)果婚禮上污呼,老公的妹妹穿的比我還像新娘。我一直安慰自己籍凝,他們只是感情好静浴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布挤渐。 她就那樣靜靜地躺著浴麻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宫纬。 梳的紋絲不亂的頭發(fā)上漓骚,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天榛泛,我揣著相機(jī)與錄音曹锨,去河邊找鬼。 笑死沛简,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的给郊。 我是一名探鬼主播荚板,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吩屹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼跪另!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起煤搜,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤免绿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后擦盾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嘲驾,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年迹卢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辽故。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腐碱,死狀恐怖誊垢,靈堂內(nèi)的尸體忽然破棺而出喂走,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響文兢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兼呵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一懂昂、第九天 我趴在偏房一處隱蔽的房頂上張望循衰。 院中可真熱鬧伐蒋,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)砌烁。三九已至,卻和暖如春梳毙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奸柬。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工懂从, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留届搁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓瞬逊,卻偏偏與公主長(zhǎng)得像士骤,于是被迫代替她去往敵國(guó)和親巨缘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349