zoukankan      html  css  js  c++  java
  • DAY 75 vue03

    1 按键修饰符
    -@keyup.enter

       
    2 数据双向绑定
    -v-model:input
    3 单选和多选
    -checkbox=true
       -checkbox=[value,value]
       -radio=''   --->value值
    4 购物车
    -基本的
       -带全选的
       -带加减的
    5 v-model
    -lazy
       -number
       -trim
    6 生命周期钩子
    -8
       -mounted:定义再vue对象中的变量,函数,初始化完成了
    7 前后端交互三种方式
    -jq的ajax(不建议使用)
       -fetch(内置:可能会有浏览器不支持)
       -axios:基于它再封装一层
       -跨域问题
      -后端解决(常用的)
           -前端使用代理(测试阶段,正式上线不会用)
           -nginx转发
           
    8 计算属性
    computed:写个函数,函数名,直接当变量用
    9 虚拟dom替换的diff算法

     

    1 组件化开发介绍

    扩展 HTML 元素,封装可重用的代码,目的是复用
    -例如:有一个轮播,可以在很多页面中使用,一个轮播有js,css,html
    -组件把js,css,html放到一起,有逻辑,有样式,有html
       
    全局组件:整个项目中都能使用的组件
    局部组件:只能再局部使用

     

    2 注册全局组件和局部组件

    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>Title</title>
       <script src="./js/vue.js"></script>

    </head>
    <body>

    <div id="app">
       <myhead></myhead>


       <hr>

       <myhead></myhead>

    </div>
    </body>

    <script>


       Vue.component('myhead', {
           template: `
               <div>
                       <button @click="handleClick">我是个按钮:点我看美女</button>
                       <button>我又是一个按钮</button>
               </div>

           `,
           methods: {
               handleClick(){
                   alert('美女')
              }
          },
      })

       var vm = new Vue({
           el: '#app',
           data: {},
           methods: {


          }
      })
    </script>

    </html>
    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>Title</title>
       <script src="./js/vue.js"></script>

    </head>
    <body>

    <div id="app">
       <myhead></myhead>


       <hr>




    </div>
    </body>

    <script>


       Vue.component('myhead', {
           template: `
               <div>
                   <button @click="handleClick">我是个按钮:点我看美女</button>
                   <button>我又是一个按钮--{{name}}</button>
                   {{show}}
                   <hr>
                   看到美女了
                   <child></child>
               </div>

           `,
           methods: {
               handleClick() {
                   alert('美女')
              }
          },
           components:{
               child:{
                   template:`
                   <div>
                       <img src="./img/1.jpg" alt="" v-show="show" height="60px" width="60px">
                       <button @click="handleRemove">点我图片消失</button>
                   </div>
                   `,
                   data(){
                       return {
                           show:true
                      }
                  },
                   methods:{
                       handleRemove(){
                           this.show=!this.show
                      }
                  }
              }
          },
           data(){
               return {name:'lqz'}
          },
      })


       var vm = new Vue({
           el: '#app',
           data: {},
           methods: {}
      })
    </script>

    </html>

     

    3 组件间通信

    3.1 父传子

    在子组件上新增属性

    <myhead myname="lqz"></myhead>

    在子组件中:定义,myname要跟新增的属性名一致

    props:['myname']

    在子组件中就可以使用myname变量了,从父组件传入的

    注意加不加:的区别

    <myhead :myname="lqz"></myhead>

     

    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>Title</title>
       <script src="./js/vue.js"></script>

    </head>
    <body>

    <div id="app">
    <!--    <myhead myname="lqz"></myhead>-->

    <!--    <hr>-->
    <!--    <myhead :myname="name"></myhead>-->

       <hr>
       <myhead :mybool="false"></myhead>


    </div>
    </body>

    <script>


       Vue.component('myhead', {
           template: `
               <div>
                   <button>我是按钮</button>
                   我的名字是:
                   <br>
                   传入的布尔值是:{{typeof mybool}}
               </div>

          `,

           // props:['myname','mybool']
           //类型限制
           props: {
               mybool: Boolean,
          }

      })


       var vm = new Vue({
           el: '#app',
           data: {
               name: '迪丽热巴'
          },


      })
    </script>

    </html>

    3.2 通过事件实现子传父

    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>Title</title>
       <script src="./js/vue.js"></script>

    </head>
    <body>

    <div id="app">

       <myhead @myevent="handleParent" @egon="handleEgon"></myhead>


    </div>
    </body>

    <script>


       Vue.component('myhead', {
           template: `
               <div>
                   <button @click="handleChild">我是按钮</button>
               </div>

           `,
           data(){
               return {
                   n:100,
                   m:200
              }
          },
           methods:{
               handleChild(){
                   console.log('子组件的按钮被点击了')
                   // this.$emit('myevent') //触发自定义的事件执行(触发myevent的执行)
                   // this.$emit('myevent',this.n,this.m) //触发自定义的事件执行(触发myevent的执行)
                   // this.$emit('egon')
              }
          },
           mounted(){
                this.$emit('egon')
          }


      })


       var vm = new Vue({
           el: '#app',
           data: {
               n:0,
               m:0,
          },
           methods:{
               handleParent(n,m){
                   console.log('自定义的事件执行了')
                   this.n=n
                   this.m=m
                   console.log(n)
                   console.log(m)

              },
               handleEgon(){
                   console.log('egon被打了')
              }
          }


      })
    </script>

    </html>

    3.2 通过ref实现父子通信

    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>Title</title>
       <script src="./js/vue.js"></script>

    </head>
    <body>

    <div id="app">

       <input type="text" placeholder="我是父组件的1" ref="myinput">
       <input type="text" placeholder="我是父组件的2" ref="myinput2">
       <input type="password" placeholder="我是父组件的3" ref="myinput3">
       <button @click="handleParentButton">点我执行一个函数</button>
       <hr>

       <myhead ref="mychild"></myhead>


    </div>
    </body>

    <script>


       Vue.component('myhead', {
           template: `
               <div>
                   <button>我是按钮</button>
               </div>

           `,
           data(){
               return {
                   name:'lqz'
              }
          },
           methods:{
               tgc(name){
                   this.name=name
                   alert(name)
                   
              }
          },



      })


       var vm = new Vue({
           el: '#app',
           data: {

          },
           methods:{
               handleParentButton(){
                   console.log('父组件的button按钮被点击了')
                   //
                   // console.log(this.$refs.myinput3.value)
                   // console.log(this.$refs.myinput3.type)
                   console.log(this.$refs.mychild.tgc('lqz is big'))
              }
          }


      })
       //ref属性如果加在普通标签上,通过this.$refs.myinput,取到的就是这个标签
       //ref属性如果加在组件上,通过this.$refs.mychild,取到的就是这个组件,拿到组件的值,拿到组件的方法,并且可以执行
    </script>

    </html>

    3.3 通过事件总线实现组件通信

    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>Title</title>
       <script src="./js/vue.js"></script>

    </head>
    <body>

    <div id="app">
       <myhead></myhead>
       <hr>
       <child1></child1>

    </div>
    </body>

    <script>

       // 定义一个事件总线
       var bus = new Vue() //new一个vue的实例,就是中央事件总线


       Vue.component('myhead', {
           template: `
               <div>
                   <button>我是按钮</button>
                   来自另一个组件的数据: <span v-text="recv"></span>
               </div>

           `,
           mounted() {
               //生命周期,当前组件dom创建完后悔执行
               console.log('当前组件dom创建完后悔执行')
               //订阅消息
               bus.$on('suibian', (item) => {
                   console.log('收到了', item)
                   this.recv=item

              })
          },
           data(){
               return {
                   recv:''
              }
          }


      })

       Vue.component('child1', {
           template: `
               <div>
                   <input type="text" v-model="input_1">
                   <button @click="handleClick">点我</button>
               </div>`,
           methods: {
               handleClick() {
                   bus.$emit('suibian', this.input_1) //发布消息,名字跟订阅消息名一致
              }
          },
           data(){
               return {
                   input_1:''
              }
          }
      })


       var vm = new Vue({
           el: '#app',
           data: {},


      })
       //ref属性如果加在普通标签上,通过this.$refs.myinput,取到的就是这个标签
       //ref属性如果加在组件上,通过this.$refs.mychild,取到的就是这个组件,拿到组件的值,拿到组件的方法,并且可以执行
    </script>

    </html>

     

    4 动态组件

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>

    </head>
    <body>

    <div id="app">
    <button @click="who='myhead1'">显示组件1</button>
    <button @click="who='myhead2'">显示组件2</button>
    <button @click="who='myhead3'">显示组件3</button>

    <keep-alive>
    <component :is="who"></component>
    </keep-alive>

    </div>
    </body>

    <script>


    Vue.component('myhead1', {
    template: `
    <div>
    <button> myhead1的按钮</button>
    <div>
    我是组件1111的样子
    </div>
    </div>

    `,

    })
    Vue.component('myhead2', {
    template: `
    <div>
    <button >myhead2的按钮</button>
    <div>
    我是组件222的样子
    <input type="text">
    </div>
    </div>

    `,

    })
    Vue.component('myhead3', {
    template: `
    <div>
    <button >myhead3的按钮</button>
    <div>
    我是组件333的样子
    <button>点我</button>
    <hr>
    <span>xxx</span>
    </div>
    </div>

    `,

    })


    var vm = new Vue({
    el: '#app',
    data: {
    who: 'myhead1'
    },


    })
    //ref属性如果加在普通标签上,通过this.$refs.myinput,取到的就是这个标签
    //ref属性如果加在组件上,通过this.$refs.mychild,取到的就是这个组件,拿到组件的值,拿到组件的方法,并且可以执行
    </script>

    </html>

    5 vue-cli创建项目

    1 安装node环境:最新是14
    -跟python比较
    -node python
    -npm pip3
    -安装cnpm,淘宝做的npm,以后使用npm的地方,都是用cnpm
    2 安装cli脚手架
    -cnpm install -g @vue/cli

    3 创建项目
    vue create my-project # 命令行
    # OR
    vue ui #图形化界面

     

     

     

    6 目录介绍

     

    node_moduls:当前项目依赖的所有第三方包,把项目给别人,这个文件夹删掉
    -npm install 就会又把依赖装上
    -pi3 install -r request.txt

    public:(你不用动)
    index.html 单页面开发(整个vue项目就这一个页面)
    favicon.ico 网站图标
    src:(经常动,你的所有代码)
    assets :静态资源,图片,js,css
    components:组件,小组件
    router:装了Router才有,否则没有,页面跳转
    store:vuex才有的,状态管理器
    views:组件,页面组件
    App.vue 根组件
    main.js 整个项目的入口js
    .gitignore # git的忽略文件,讲到git才知道
    babel.config.js # 不用动
    package.json #依赖的模块
    package-lock.json #依赖的模块
    README.md # 介绍

    重点

    每一个组件都有三部分
    #html内容写在这
    <template>
    <div class="home">

    </div>
    </template>


    #js内容
    <script>
    export default {
    name: 'Home',
    data(){
    return {
    a:'asdfasdfasdfasdfasd'
    }

    },

    }
    </script>

    #style的内容
    <style>

    </style>

    把vue项目编译成纯html,css,js

    webpack:模块化
    npm run build
    在项目路径下有个dist文件夹:html,css,js
  • 相关阅读:
    Webdriver启动Firefox浏览器后,页面显示空白
    Windows+Python+Selenium基础篇之1-环境搭建
    office2010无法卸载问题
    .NET使用FastDBF读写DBF
    并发编程相关概念
    C#的多线程简洁笔记
    asp.net core 3.1 入口:Program.cs中的Main函数
    【WPF学习】第四十四章 图画
    .NET知识梳理——1.泛型Generic
    C#个推SDK推送安卓+iOS
  • 原文地址:https://www.cnblogs.com/DEJAVU888/p/14893855.html
Copyright © 2011-2022 走看看