Vue前后端數據交互


  

前后端數據交互

異步編程

ajax的異步編程

通過url訪問地址獲取數據,數據獲取成功后通過ajax的success屬性方法進行回調,但是存在一個問題:當需要多次回調時,如果有需求這幾次回調的順序必須固定,那么ajax就只能進行success的嵌套處理,但是這明顯不符合程序的健壯性和代碼的解耦性,所以Promise更為優秀。

Promise的方式進行異步操作

Promise處理對象的優點:①可以避免多層異步調用嵌套問題(回調地域)②Promise對象提供了簡潔的API,使得控制異步操作更加容易。

基本用法:

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Promise</title>
     <script type="text/javascript" src="js/vue.js"></script>
 </head>
 <body>
 <div id="app"></div>
 <script type="text/javascript">
     /*實例化一個Promise的對象
    * 內部參數:resolve:數據交互成功后實現的 reject:數據交互失敗之后實現的
    * 用setTimeout來模擬 異步操作
    * */
     const p = new Promise(function (resolve , reject) {
        setTimeout(function () {
            var flag = false;
            if (flag) {
                resolve('flag是true');
            }else{
                reject('flag是false');
            }
        },100);
    });
     /*p.then 之后是當數據傳輸成功/失敗之后執行的 這時數據已經傳到resolve和reject中了*/
     p.then(function (successInfo) {
         console.log(successInfo);
    },function (failInfo) {
         console.log(failInfo);
    });
     const vm = new Vue({
         el:'#app',
         data:{}
    });
 </script>
 </body>
 </html>
路由的使用
 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Vue</title>
     <!--引入vue的支持文件-->
     <script type="text/javascript" src="js/vue.js"></script>
     <script src="js/vue-router.js"> </script>
 </head>
 <body>
         <div id="app">
             <!--to屬性相當於一個 a標簽-->
             <router-link to="/login/1"> 登錄 </router-link>
             <router-link to="/login/2"> 登錄 </router-link>
             <router-link to="/login/3"> 登錄 </router-link>
             <router-link to="/register"> 注冊</router-link>
             <!--設置路由占位符-->
             <router-view></router-view>
         </div>
 
     <script type="text/javascript">
         /*定義子組件*/
         const Login={
             template:`<div>
                                 //獲取動態路由的參數值
                         <h1>Login id : {{$route.params.loginId}}</h1>
                         <hr/>
                         <router-link to="/username">用戶名</router-link>
                         <router-link to="/password">密碼</router-link>
                         <router-view></router-view>
                         </div>`
            };
         const Register={
             template: `<h1>Register模塊</h1>`
        };
         const username={
             template:  `
            <div> username:<input type="text"></div>
             `
        };
         const password = {
             template: `
             <div>password: <input type="password"></div>
             `
        };
         /*初始化路由對象實例*/
         const router = new VueRouter({
             /*配置路由規則*/
           routes:[
               /*設置路由重定向*/
              {path:'/' , redirect:'/login/1'},
               /*通過restful的形式設置動態路由規則*/
              {path:'/login/:loginId' , component:Login ,children:[
                   /*設置嵌套路由*/
                      {path:'/username' , component:username},
                      {path:'/password' , component : password}
                  ]},
              {path:'/register' , component:Register }
 
          ]
        });
         const vm = new Vue({
             el:'#app',
             data:{
 
            },
             router: router
        });
     </script>
 </body>
 </html>
路由的幾種傳參方式
 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Vue</title>
     <!--引入vue的支持文件-->
     <script type="text/javascript" src="js/vue.js"></script>
     <script src="js/vue-router.js"> </script>
 </head>
 <body>
         <div id="app">
             <!--to屬性相當於一個 a標簽-->
             <router-link to="/login/1"> 登錄 </router-link>
             <router-link to="/login/2"> 登錄 </router-link>
             <router-link to="/login/3"> 登錄 </router-link>
             <router-link to="/register"> 注冊</router-link>
             <!--設置路由占位符-->
             <router-view></router-view>
         </div>
 
     <script type="text/javascript">
         /*定義子組件*/
         const Login={
                 props:['loginId','uname','upassword'],
             template:`
  <div>
                                 //獲取動態路由的參數值
                                 //第一種直接定義props為true
                         <h1>Login id : {{loginId}}</h1>
                                 //第二種props直接傳遞一個對象,但是id會失效
         <h1>Login id : {{loginId}} ---uname:{{uname}}---upassword:{{upassword}}</h1>
                                 //第三種定義一個箭頭函數,這種方式既可以傳遞url中攜帶的參數,又可以傳遞自定義靜態數據
         <h1>Login id : {{loginId}} ---uname:{{uname}}---upassword:{{upassword}}</h1>
                         <hr/>
                         <router-link to="/username">用戶名</router-link>
                         <router-link to="/password">密碼</router-link>
                         <router-view></router-view>
                         </div>`
            };
         const Register={
             template: `<h1>Register模塊</h1>`
        };
         const username={
             template:  `
            <div> username:<input type="text"></div>
             `
        };
         const password = {
             template: `
             <div>password: <input type="password"></div>
             `
        };
         /*初始化路由對象實例*/
         const router = new VueRouter({
             /*配置路由規則*/
           routes:[
               /*設置路由重定向*/
              {path:'/' , redirect:'/login/1'},
               /*通過restful的形式設置動態路由規則*/
              /* /!*第一種*!/
              {path:'/login/:loginId' , component:Login ,props:true },*/
              /* /!*第二種*!/
              {path:'/login/:loginId' , component:Login ,props:{uname:'張浩' ,upassword:'張浩'} },*/
              /*第三種*/
              {path:'/login/:loginId', component: Login , props: route => ({uname:'張浩',upassword :'張浩' , loginId: route.params.loginId})},
              {path:'/register' , component:Register }
 
          ]
        });
         const vm = new Vue({
             el:'#app',
             data:{
 
            },
             router: router
        });
     </script>
 </body>
 </html>




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM