• vue项目


    一 一个简单的页面

      vue页面由<template></template>,<script></script>,<style></style>三部分组成

      App.vue

    <template>
      <div id="app">
         <h3>{{ msg }}</h3>
          <ul>
            <li v-for="(item,index) in menu ">{{item }}</li>
          </ul>
      </div>
    </template>
    
    <script>
      export default{            #固定格式
          name:'App',
          data(){
              return{            #函数,必须有返回值
                  'msg':'hello,world',
                  'menu':[3,11,23,55,66,77]
              }
          }
      }
    
    </script>
    
    <style>
    
    </style>

       进阶:绑定函数

    <template>
      <div id="app">
         <h3>{{ msg }}</h3>
          <ul>
            <li v-for="(item,index) in menu ">{{item }}</li>
          </ul>
          <button @click="addHandle">添加菜单</button>
      </div>
    </template>
    
    <script>
      export default{
          name:'App',
          data(){
              return{
                  'msg':'hello,world',
                  'menu':[3,11,23,55,66,77]
              }
          },
          methods:{
              addHandle(){
                  this.menu.push('99')
              }
          }
      }
    
    </script>

    二 组件之间的通信

      1 子级在父级中显示。

      App.vue 父级  Header.vue 子级

      App.vue

    <template>
      <div id="app">
        <Header></Header>   # 导入的,必须是闭合标签
         <h3>{{ msg }}</h3>
          <ul>
            <li v-for="(item,index) in menu ">{{item }}</li>
          </ul>
          <button @click="addHandle">添加菜单</button>
      </div>
    </template>
    
    <script>
      import Header from './Header.vue'   // import 放在外面,地址加引号
      export default{
          name:'App',
          data(){
              return{
                  'msg':'hello,world',
                  'menu':[3,11,23,55,66,77]
              }
          },
          methods:{
              addHandle(){
                  this.menu.push('99')
              }
          },
         components:{
            Header   //相当于 Header:Header   !! 挂载子组件
         }
    
      }
    
    </script>
    
    <style>
    
    </style>

      Header.vue

    <template>
      <img :src="imgSrc" alt="">      #绑定属性
    </template>
    
    <script>
      import imgSrc from './assets/logo.png'   // import 放在export default 外面,地址加引号
      export default{
          name:'Header',
    
          data(){
              return{
                imgSrc:imgSrc
              }
          }
      }
    </script>
    
    <style>
    
    </style>

      2 父级往子级传值,使用自定义属性,验证props。

      父级中的城市列表,传给子级。子级 v-for 显示。

      App.vue 父级

        1)父级挂载子组件

        2)父级有子级的数据

        3)子级自定义属性  <Footer :city=''></Footer>

        4)子级验证属性的数据类型是否正确 props

    <template>
      <div id="app">
        <Header></Header>
         <h3>{{ msg }}</h3>
          <ul>
            <li v-for="(item,index) in menu ">{{item }}</li>
          </ul>
          <button @click="addHandle">添加菜单</button>
          <Footer :city="citys"></Footer>
      </div>
    </template>
    
    <script>
      import Header from './Header.vue'   // import 放在外面,地址加引号
      import Footer from './Footer.vue'
      export default{
          name:'App',
          data(){
              return{
                  'msg':'hello,world',
                  'menu':[3,11,23,55,66,77],
                  'citys':['上海','青岛','泰安'],
              }
          },
          methods:{
              addHandle(){
                  this.menu.push('99')
              }
          },
         components:{
            Header,   //相当于 Header:Header   !!
            Footer,
         }
    
      }
    
    </script>
    
    <style>
    
    </style>

      Footer.vue 子级

    <template>
      <ul>
        <li v-for="item in city">{{item}}</li>
      </ul>
    </template>
    
    <script>
      export default{
          name:'Footer',
          data(){
              return{
    
              }
          },
        props:{
              city:Array,
        }
      }
    </script>
    
    <style>
    
    </style>

       3 子级往父级传值,使用自定义事件。

      子级有一个button,有一个城市名称,点击button,将此城市名称传给父级,放入父级中的citys中。

      步骤

        1)在在父级中的子级组件绑定事件,@自定义事件 = '父级函数'

        2)子级中,绑定点击事件函数,触发父级中的自定义事件 。

            样式:

            @click = 子级函数

            子级函数(){

              this.$emit('父级中的自定义事件名','与自定义事件绑定在一起的父级函数需要的参数')   //固定格式,触发父级中的自定义事件。

            }

      流程就是,子级中点击事件,对应一个子级函数,这个子级函数,this.$emit(‘事件名’,‘参数’),父级中找到时间名对应的父级函数,接收参数,执行函数。收!

      App.vue

    <template>
      <div id="app">
        <Header></Header>
         <h3>{{ msg }}</h3>
          <ul>
            <li v-for="(item,index) in menu ">{{item }}</li>
          </ul>
          <button @click="addHandle">添加菜单</button>
          <Footer :city="citys" @addOnecity="cityHandle"></Footer>  <!-- cityHandle 触发的函数,addOnecity 自定义事件-->
      </div>
    </template>
    
    <script>
      import Header from './Header.vue'   // import 放在外面,地址加引号
      import Footer from './Footer.vue'
      export default{
          name:'App',
          data(){
              return{
                  'msg':'hello,world',
                  'menu':[3,11,23,55,66,77],
                  'citys':['上海','青岛','泰安'],
              }
          },
          methods:{
              addHandle(){
                  this.menu.push('99')
              },
              cityHandle(city){          //事件的声明
                  this.citys.push(city)
              }
          },
         components:{
            Header,   //相当于 Header:Header   !!
            Footer,
         }
    
      }
    
    </script>
    
    <style>
    
    </style>

      Footer.vue

    <template>
      <div>
        <ul>
           <li v-for="item in city">{{item}}</li>
           </ul>
        <button @click="addCity">添加一个城市</button>
      </div>
    
    </template>
    
    <script>
      export default{
          name:'Footer',
          data(){
              return{
    
              }
          },
        props:{
              city:Array,
        },
        methods:{
              addCity(){  // 触发父级的自定义事件
                this.$emit('addOnecity','西安')
              }
        }
      }
    </script>
    
    <style>
    
    </style>

    三 scoped的应用

      vue页面的显示是自上而下,如果每个页面都有独自的style,在这种情况下,页面以最下层的style样式为准。这是不允许的,解决方法是,每个页面的style后面加scoped,限定了样式只在当前页面显示。主页面一般不加,因为主页面一般只是设定margin:0,padding:0,只在每个组件中写scoped。

    <template>
      <div>
        <h3>Footer</h3>
        <ul>
           <li v-for="item in city">{{item}}</li>
           </ul>
        <button @click="addCity">添加一个城市</button>
      </div>
    
    </template>
    
    <script>
      export default{
          name:'Footer',
          data(){
              return{
    
              }
          },
        props:{
              city:Array,
        },
        methods:{
              addCity(){  // 触发父级的自定义事件
                this.$emit('addOnecity','西安')
              }
        }
      }
    </script>
    
    <style scoped>
      h3{
        color:red;
      }
    </style>
  • 相关阅读:
    Shell 脚本中调用另一个 Shell 脚本的三种方式
    Shell脚本的三种执行方式
    python selenium中Excel数据维护(二)
    python里面的xlrd模块详解(一)
    selenium处理iframe定位于切换问题解决办法
    Selenium在定位的class含有空格的复合类的解决办法整理
    SqlSugar ORM已经支持读写分离
    ASP.NET Core的Kestrel服务器
    服务是如何加载并运行的, Kestrel、配置与环境
    ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解
  • 原文地址:https://www.cnblogs.com/654321cc/p/8552522.html
Copyright © 2020-2023  润新知