迎着风跑  

一、组件间的通信

组件间的通信分两种情况:父级件传值给子组件,

1、父组件传值给子组件

  • 定义子组件模板

    <!--创建子组件模板-->
       <template id="showfrom">
           <div>
               <h1>我是子组件:{{title}}</h1>
           </div>
       </template>
  • 声明并注册子组件


    const  sfm={
           template:"#showfrom",
           props:['title']   //父组件传值给子组件,子组件通过props属性定义用哪个变量来接收值
      }
  • 调用子组件


    <!--调用组件
        title:是子组件中用来接收父组件值的变量,title变量不能在子组件的data中声明
        str:是父组件中data函数中的变量
    -->
    <sfm v-bind:title="str"></sfm>

2、props 验证


props: {
    items:{//属性名为items
        type:Array,//属性的类型为数组
        default:[],//属性的默认值为[]
        required:true //该属性为必须
    }
}

当 prop 验证失败的时候,(开发环境构建版本的) Vue 将会产生一个控制台的警告。

 

3、子组件传值给父组件

子组件传值给父组件,需要通过子组件的自定义事件进行。

将子组件的自定义事件与父组件的某个事件进行关联,操作了子组件的事件,就相当于作了父组件的事件。

  • 在父组件中定义函数


       //vue实例
       let vue=new Vue({
           el:"#ap",
           data(){
               return {
                   nums:0
              }
          },components:{
               fm
          },methods:{//父组件中定义函数
               //数量+
               sup(newval,oldval){
                   this.nums++;
              },
               //数量-
               sub(newval,oldval){
                   this.nums--;
              }
          }
      });
  • 在调用子组件时编写自定义事件与父组件事件的关联


    <fm v-on:sp="sup" v-on:sb="sub"></fm>
  • 在子组件中编写事件触发父组件对应的事件


    模板代码
    <template id="numfrom">
           <div>
               <hr/>
               <p>此处为子组件</p>
               <button type="button" v-on:click="nmp">num++</button>
               <button type="button" v-on:click="nmb">num--</button>
           </div>
       </template>
       
    子组件js代码
    const fm={
           template:"#numfrom",
           methods: {
               //子组件的+
               nmp(){
                   //调用与父组件关联的自定义事件
                   this.$emit('sp');
              },nmb(){//子组件的-
                   //调用与父组件关联的自定义事件
                   this.$emit('sb');
              }
          }
      }

二、vue的路由

路由就是为每个组件绑定一个url地址,可以通过路由绑定的url地址方便的调用指定组件

1、使用路由链接切换组件

  • 导入路由支持库


    <script src="https://cdn.jsdelivr.net/npm/vue-router@3.5.2/dist/vue-router.js"></script>
  • 添加路由链接

    要想通过路由切换组件,只能使用路由提供的链接标签或使用事件切换


    <!--添加路由链接-->
    <router-link to="/">登录</router-link>
    <router-link to="/">注册</router-link>
  • 挖坑(添加路由填充位)

    添加路由填充位是用来动态显示组件的,以前调用组件的代码写在哪儿,就用添加路由填充位替换

        <div id="ap">
           <p>
               <!--添加路由链接-->
               <router-link to="/">登录</router-link>
               <router-link to="/">注册</router-link>
           </p>
           <hr>

    <!--       &lt;!&ndash;调用登录组件&ndash;&gt;-->
    <!--       <login></login>-->
    <!--       &lt;!&ndash;调用注册组件&ndash;&gt;-->
    <!--       <reg></reg>-->
           <!--添加路由填充位 挖一个坑,这个坑就是用来填充要切换的组件-->
           <router-view></router-view>
       </div>
  • 创建路由对象


       //创建路由对象
       let router=new VueRouter({
           //编写路由规则
           routes:[
               //编写登录组件的路由规则
              {path:'/login',component:"loginfrom"},
              {path:'/reg',component:"regfrom"}
          ]
      })
  • 将路由对象添加到持载点中


    //vue实例
       let vue=new Vue({
           el:"#ap",
           data(){
               return {
              }
          },components:{
               loginfrom,
               regfrom
          },router //注册路由
      });

2、使用路由事件切换组件

在事件中编写如下代码


方式一:
this.$router.push('/login');  //切换到login组件

方式二:
   let router=new VueRouter({
       //编写路由规则
       routes:[
           //配置默认路径下的组件
          {path:'/',component:loginfrom},
          {path:'/login',name:'loginForm',component:loginfrom},
          {path:'/reg',name:'regForm',component:regfrom}
      ]
  })
this.$router.push({name:'loginForm'});  //使用路由的name属性切换

3、使用路由传值到组件

a、方式一

  • 在路由规则中添加接收参数的占位符


    //创建路由对象
       let router=new VueRouter({
           //编写路由规则
           routes:[
               //配置默认路径下的组件
              {path:'/',component:loginfrom},
              {path:'/login/:account',name:'loginForm',component:loginfrom},
          ]
      })
  • 修改路由链接


    <router-link to="/login/tom">登录</router-link>
  • 在子组件中接收参数


    //登录组件
       const loginfrom={
           template:"#login",
           data(){
               return {
                   ac:'',
              }
          },created(){
               //获得路由传递过来的值
               this.ac=this.$route.params.account;
          }
      }

b、方式二

  • 修改父组件中的事件


    //vue实例                                                                      
    let vue=new Vue({                                                            
       el:"#ap",                                                                
       data(){                                                                  
           return {                                                            
          }                                                                    
      },components:{                                                          
           loginfrom,                                                          
           regfrom                                                              
      },methods:{                                                              
           //登录按钮                                                              
           btnLogin(){                                                          
               this.$router.push({name:'loginForm',params:{account:'jack'}});  
          }                                                                    
      },router //注册路由                                                          
    });                                                                          

    <font color=red>注意:这里不能使用:account来传递参数了,因为父组件中,已经使用params来携带参数了。</font>

  • 在子组件中接收参数


    //登录组件
       const loginfrom={
           template:"#login",
           data(){
               return {
                   ac:'',
              }
          },created(){
               //获得路由传递过来的值
               this.ac=this.$route.params.account;
          }
      }

4、路由的嵌套


   //创建路由对象
   let router = new VueRouter({
       //编写路由规则
       routes: [
           //配置默认路径下的组件
          {path: '/', redirect: '/main'},
          {path: '/main',
               name: 'mainform',
               component: mainform,
               children: [//表示mainform组件中又有两个组件
                  {path: '/login', name: 'loginForm', component: loginfrom},
                  {path: '/reg', name: 'regForm', component: regfrom}
              ]
          }
      ]
  })

 

三、VUE axios

axios是vue中提供的用来发送请求给服务器的组件。Vue 2.0 之后

  • 导入axios支持


    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  • axios.get


    //发送请求
    //params参数中为要传给服务端的数据,params参数必写 , 如果没有参数传{}即可
    axios.get('http://127.0.0.1:8080/user/list',{params:{}})
        .then(result=>{//请求成功后的回调函数
         console.info(result);
    }).catch(error=>{//请求失败后的回调函数
      console.info(error);
    })
  • axios.post

    axios 的 post 请求的请求参数是以 json-string 的形式传递到后台的,对于 Spring MVC 而言,Controller 中是使用 @RequestBody 接收请求参数。同样使用这种形式的还有 PUT、PATCH 等请求方式。


    btnquery(){//根据条件查询
                   axios.post('http://localhost:8080/user/query',
                      {username:this.username,account: this.account})
                  .then(result=>{
                       if(result.data.code==200){
                           this.userArray=result.data.data;
                      }else{
                           alert(result.data.msg);
                      }
                       console.log(result.data);
                  }).catch(error=>{//请求失败后的回调函数
                       console.info(error);
                  })
              }
          }

 

posted on 2021-10-25 16:14  迎着风跑  阅读(427)  评论(0编辑  收藏  举报