最近vueJS比較火,就想嘗試用Vue做個項目練練手,正好近期有兩個小項目需要做,就上手研究了一下,而如題所說的場景應該是大家平時開發中會經常遇到的場景
奈何網上沒有一個地方能夠直接給出完整的解決方案,好在最終經過在大量搜索查閱,東平西湊,終於實現了
廢話不多說,我直接貼出從前端到后台的一整套代碼,避免大家再去踩坑
1.后台代碼,這里我用的是.net的web api作為后台數據服務,代碼如下
[HttpPost] public HttpResponseMessage QueryRecord(HttpRequestMessage request) { string postStr = request.Content.ReadAsStringAsync().Result; if (postStr.Length==0) { return new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent("參數為空") }; } ViewResponse viewResponse = new ViewResponse();//自定義最終返回對象 -----業務邏輯代碼省略----- viewResponse.data = recordList; HttpResponseMessage response = Request.CreateResponse<ViewResponse>(HttpStatusCode.OK, viewResponse); return response; }
另外,如果最終你們和我示例中一樣,都是需要返回一個Json數據對象的話,則需要對該對象的實體類說明加上[DataContract]和[DataMember]屬性,如下
[DataContract] public class ViewResponse<T> { [DataMember] public string code { get; set; } [DataMember] public string msg { get; set; } [DataMember] public T data { get; set; } }
由於是跨域請求,則必須還要對后台進行設置,允許請求跨域訪問
.net后台設置允許跨域很簡單,只需要在web.config中加入下面配置即可
<system.webServer> <!--允許跨域請求--> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/> <add name="Access-Control-Allow-Headers" value="x-requested-with"/> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> <!--end 允許跨域請求--> </system.webServer>
2.前端頁面,使用vue.min.js和vue-resource.min.js實現后台數據請求和頁面數據綁定
首先,引入這兩個JS文件
<script type="text/javascript" src="Content/js/vue.min.js"></script> <script type="text/javascript" src="Content/js/vue-resource.min.js"></script>
然后開始使用vue-resource的$http.post發送POST跨域請求
<script type="text/javascript"> var vm = new Vue({ el: '#vueapp', //div的id data: { items: [] //自定數據接收變量 }, http: { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }, methods: { clickButton: function () { //vue-resource發送跨域請求 var url = 'http://www.xxxx.com/api/oooo/xxxx'; var username = $("#userName").val(); var jobno = $("#jobNo").val(); var sdate = $("#startDate").val() + " 0:00:00"; var edate = $("#endDate").val() + " 23:59:59"; var sendData = { "Name": username, "JobNo": jobno, "StartDate": sdate, "EndDate": edate }; this.$http.post(url, JSON.stringify(sendData), { emulateJSON: true }) .then(function (res) { //成功回調 //console.log(res.data); //alert(JSON.stringify(res.data)); vm.items = res.data.data; }, function () { // 失敗回調 alert("查詢失敗,請檢查網絡"); }); } }, created: function () { //created方法,頁面初始調用 } }); </script>
這里有幾個要注意的地方
(1)要提前在Vue對象下的data屬性中定義請求后台成功后返回的數據存放對象,示例中我定義了一個items數組,用來放返回數據中的列表結果
(2)this.$http.post中啟用{ emulateJSON: true },則Vue對象下的http屬性中headers的設置為'Content-Type': 'application/x-www-form-urlencoded'
(3)如果請求入參需要傳Json數據的話,在創建完示例中的入參Json對象SendData后,還需要用JSON.stringify方法將其轉為Json字符串才可以
(4)最終返回的后台數據,都在返回對象的data里面,示例中,我的后台返回數據都在res.data里
接下來就是最終的數據綁定了,這里數據綁定我采用當下比較流行的Vue,即列表數據綁定通過v-for語法糖輕松搞定
<div class="aui-coupon-two" v-for="item in items"> <div class="aui-coupon-three"> <div class="aui-coupon-four"> <div class="aui-flex"> <div class="aui-flex-title"> <h1><em>{{item.CheckDate}}</em></h1> <p>{{item.Week}}</p> </div> <div class="aui-flex-box"> <h2 v-for="time in item.CheckTimeList">{{time}}</h2> </div> </div> </div> </div> </div>
好了,這次分享就到此結束,希望能幫到大家