Vue.js使用-http請求

Vue.js使用-ajax使用 1.爲何要使用ajax 前面的例子,使用的是本地模擬數據,經過ajax請求服務器數據。javascript

2.使用jquery的ajax庫示例html

new Vue({
    el: '#app',
    data: {
        searchQuery: '',
        columns: [{name: 'name', iskey: true}, {name: 'age'},{name: 'sex', dataSource:['Male', 'Female']}],
        peoples: []
    },
    ready: function () {
        this.getPeoples();
    },
    methods: {
        getPeoples: function () {
            var vm = this;
            $.ajax({
                url: 'http://localhost:20000/my_test',
                type: 'get',
                dataType: 'json',
                success: function (data) {
                    vm.$set('peoples', data.result);
                },
                error: function(xhr, errorType, error) {
                    alert('Ajax request error, errorType: ' + errorType +  ', error: ' + error)
                }
            });
        }
    }
})

3.vue-resource庫 vue是基於數據驅動的,不須要直接操做DOM,所以沒有必要引入jquery vue提供了一款輕量的http請求庫,vue-resource vue-resource除了提供http請求外,還提供了inteceptor攔截器功能,在訪問前,訪問後,作處理。vue

4.vue-resource語法-使用$http對象java

// 基於全局Vue對象使用http
Vue.http.get('/someUrl',[options]).then(successCallback, errorCallback);
Vue.http.post('/someUrl',[body],[options]).then(successCallback, errorCallback);
// 在一個Vue實例內使用$http
this.$http.get('/someUrl',[options]).then(sucessCallback, errorCallback);
this.$http.post('/someUrl',[body],[options]).then(successCallback, errorCallback);

then方法的回調函數寫法有兩種,第一種是傳統的函數寫法,第二種是更簡潔的Lambda表達式寫法。jquery

//傳統寫法
this.$http.get('/someUrl',[options]).then(function(response){
	//響應成功回調
},function(response){
	//響應錯誤回調
});

//Lambda寫法
this.$http.get('someUrl',[options]).then((response)=>{
	//響應成功回調
},(response)=>{
	//響應錯誤回調
});

5.vue-resource示例ajax

<script src="js/vue-resource.js"></script>
<script>
new Vue({
        el: '#app',
        data: {
            searchQuery: '',
            columns: [{name: 'name', iskey: true}, {name: 'age'},{name: 'sex', dataSource:['Male', 'Female']}],
            peoples: []
        },
        ready: function () {
            this.getPeoples();
        },
        methods: {
            getPeoples: function () {
                var vm = this;
                vm.$http.get('http://localhost:20000/my_test').then(
                        function (data) {
                            var newdata = JSON.parse(data.body)
                            vm.$set('peoples', newdata.result)
                        }).catch(function (response) {
                            console.log(response)
                        })
            }
        }
    })
</script>

6.vue-resource用法-使用$resource對象 除了使用$http對象訪問http,還能夠使用$resource對象來訪問。 resource服務默認提供如下幾種action: get:{method: 'GET'}, save:{method: 'POST'}, query:{method: 'GET'}, update:{method: 'PUT'}, remove:{method: 'DELETE'}, delete:{method: 'DELETE'},json

resource對象使用示例以下:服務器

new Vue({
        el: '#app',
        data: {
            searchQuery: '',
            columns: [{name: 'name', iskey: true}, {name: 'age'},{name: 'sex', dataSource:['Male', 'Female']}],
            peoples: []
        },
        ready: function () {
            this.getPeoples();
        },
        methods: {
            getPeoples: function () {
                var vm = this;
                var resource = this.$resource('http://localhost:20000/my_test')

                resource.get().then(
                        function (data) {
                            var newdata = JSON.parse(data.body)
                            vm.$set('peoples', newdata.result)
                        }).catch(function (response) {
                            console.log(response)
                        })
            }
        }
    })

7.攔截器interceptor 語法以下:app

Vue.http.interceptors.push(function(request, next){
	//...
	//請求發送前的處理邏輯
	//...
	next(function(response){
		//...
		//請求發送後的處理邏輯
		//...
		//根據請求的狀態,response參數會返回給successCallback或errorCallback
		return response
	})

})

8.攔截器interceptor使用示例函數

<div id="help">
        <loading v-show="showLoading"></loading>
    </div>
<template id="loading-template">
			<div class="loading-overlay">
				<div class="sk-three-bounce">
					<div class="sk-child sk-bounce1"></div>
					<div class="sk-child sk-bounce2"></div>
					<div class="sk-child sk-bounce3"></div>
				</div>
			</div>
    </template>
<script>
var help = new Vue({
        el: '#help',
        data: {
            showLoading: false
        },
        components: {
            'loading': {
                template: '#loading-template'
            }
        }
    })

    Vue.http.interceptors.push(function(request, next){
        help.showLoading = true
        next(function (response) {
            help.showLoading = false
            return response
        })
    })
</script>

9.vue-resource的優勢 vue-resource比jquery輕量,能夠使用Vue.http或者Vue.resource處理HTTP請求,二者沒有什麼區別。 另外能夠是用interceptor在請求前和請求後附加一些行爲。

相關文章
相關標籤/搜索