首页 > 其他分享 >vue-组件

vue-组件

时间:2023-09-19 20:58:08浏览次数:28  
标签:username vue 自定义 Vue 使用 组件 data

1.组件的介绍和使用

组件中是可以套组件的

组件就是:扩展 HTML元素,封装可重用的代码,目的就是复用

例如:

  有一个轮播图,可以在很多页面中使用,一个轮播有js,css,html
组件把js,css,html放到一起,有逻辑,有样式,有html

组件的分类:

  - 全局组件:可以放在根中,可以在所有组件中使用

  - 局部组件:只能在当前组件中使用

1.1 全局组件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <h5>使用组件</h5>
    <hr>
    <child></child>
    <hr>
    <h5>第二次使用</h5>
    <child></child>
</div>
</body>
<script>
    // 定义一个全局组件:组件名,{样式,数据,方法。。。}
    Vue.component('child', {
        template: ` <div>
          <button @click="back">后退</button>
          {{ title }}
          <button>前进</button>
          </div>`,
        data() {
            return {
                title: '首页'
            }
        },
        methods:{
            back(){
                console.log('后退')
            },
            forward() {
                console.log('前进')
            }
        }
    })
    var vm=new Vue({
        el:'#app',
    })
</script>
</html>

结果:

1.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">
    <h5>组件的使用</h5>
    <hh></hh>
</div>

</body>
<script>
    // Vue可以称为根组件
    var vm = new Vue({
        // 局部组件只能在这个el中使用
        el: '#app',
        data: {},
        // 局部组件定义在其他组件的内部,只能在父组件中使用,不能到别的地方使用
        components: {
            'hh': {
                template: `
                  <div>
                  <h5>局部组件</h5>
                  <img :src="url" alt="" height="400px" width="400px">
                  </div>`,
                data() {
                    return {
                        url: 'http://pic.imeitou.com/uploads/allimg/230331/7-230331110I0.jpg'
                    }
                },
                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">
    <h5>使用组件</h5>
    <hh></hh>
    <hr>
    <child></child>
    <hr>

</div>
</body>
<script>
    // 定义一个全局组件:组件名,{样式,数据,方法。。。}
    Vue.component('child', {
        template: ` <div>
          <button @click="back">后退</button>
          {{ title }}
          <button>前进</button>
          </div>`,
        data() {
            return {
                title: '首页'
            }
        },
        methods:{
            back(){
                console.log('后退')
            },
            forward() {
                console.log('前进')
            }
        }
    })
     // 定义局部组件:通过变量的形式定义
    var hh = {
        template: `
          <div>
          <h5>局部组件</h5>
          <img :src="url" alt="" height="400px" width="400px">
          </div>`,
        data() {
            return {
                url: 'http://pic.imeitou.com/uploads/allimg/230331/7-230331110I0.jpg'
            }
        },
        methods: {}
    }
    var vm=new Vue({
        el:'#app',
        components:{
            hh
        }
    })
</script>
</html>

 

结果:

局部组件只能在根组件中使用

组件总结:

1. 全局组件是使用Vue.component定义的,可以在全局任意组件中使用

2. 局部组件是定义在某个组件内的:components,只能用在当前组件中

3. 组件可以嵌套定义和使用

# 扩展:elementui,提供给咱们很多全局组件,可以引入使用

2. 组件间通信

组件嵌套:

 - 父组件被数据传递给子组件

  - 自定义属性:

    1. 在子组件中 自定义属性,使用属性指令绑定父组件的变量

    2. 在子组件中,使用props接收:['属性名','属性名2']

    3. 在子组件中,使用属性名即可

 - 子组件把数据传递给父组件

  - 自定义事件:

    

2.1 组件间通信值父传子

 - 通过自定义属性(可以写多个):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>组件的使用</h1>
    <hr>
    <!--这样写myshow是字符串类型-->
<!--     <hh :murl="url" myshow="true"></hh>-->
<!--绑定属性,myshow是布尔类型-->
    <hh :murl="url" :myshow="true"></hh>
    <hr>
</div>
</body>
<script>
    // 定义一个局部组件
    var hh = {
        template: `
          <div>
          <h5>局部组件</h5>
          <!--这边绑定的也是自定义的属性:murl-->
          <img :src="murl" alt="" height="400px">
          <button @click="handleCheck">点我看myshow类型</button>
          </div>`,
        data() {
            return {}
        },
        methods: {
            handleCheck(){
                console.log(this.myshow)
                console.log(typeof this.myshow)
            }
        },
        // 通过props拿到url
        props: ['murl','myshow']
    }
    // 根组件,父组件中有图片地址
    var wm = new Vue({
        el: '#app',
        data: {
            url: 'http://pic.imeitou.com/uploads/allimg/230331/7-230331110I0.jpg'
        },
        // 局部组件是定义在某个组件内,可以定义多个,只能在它父组件中使用,不能到别的地方使用
        components: {
            hh,
        }
    })
</script>
</html>

 

结果:

-1. 在父组件的data中存放:url:图片地址

-2. 在子组件的标签中自定义属性并绑定url

- 3. 在子组件中使用props接收自定义属性:props:['自定义属性']

-4 自定义的属性不需要再data中定义了

 自定义属性myshow的类型:

<hh :murl="url" myshow="true"></hh>:字符串

 <hh :murl="url" :myshow="true"></hh>:布尔类型

 

2.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">
    <h4>组件的使用</h4>
    接收到的子组件输入的内容是:{{username}}
    <hr>
    <!--自定义事件:handleEvent,写在父组件中-->
    <hh @myevent="handleEvent"></hh>
    <hr>
</div>
</body>
<script>
    var hh={
        template: `
          <div>
          <h5>局部组件</h5>
          <img :src="url" alt="" height="400px">
          <br>
          <input type="text" v-model="username"><button @click="handleSend">传递到父组件</button>
          </div>`,
        data() {
            return {
                url: 'http://pic.imeitou.com/uploads/allimg/230331/7-230331110I0.jpg',
                username: '',
            }
        },
        methods:{
            handleSend(){
                // 传给父组件里面写自定义事件的名字
                this.$emit('myevent',this.username)
            }
        }
    }
    var vm=new Vue({
        el:'#app',
        data:{
            username:'',
        },
        methods:{
            // 自定义事件,写在父组件中,这里的username是子组件传递过来的
            handleEvent(username){
                console.log('父组件自定义事件的event执行了')
                console.log(username) //这里是子组件传递的username、
                this.username=username // 将接收到子组件传递的username给了父组件中的username
            }
        },
        components:{
            hh
        }
    })
</script>
</html>

 

结果:

流程:

 

  

 

标签:username,vue,自定义,Vue,使用,组件,data
From: https://www.cnblogs.com/Lucky-Hua/p/17715332.html

相关文章

  • uniapp项目实践总结(十八)自定义多列瀑布流组件
    导语:有时候展示图片等内容,会遇到图片高度不一致的情况,这时候就不能使用等高双列或多列展示了,这时候会用到瀑布流的页面布局,下面就一起探讨一下瀑布流的实现方法。目录准备工作原理分析实战演练案例展示准备工作在pages/index文件夹下面新建一个waterfall.vue的组件;按......
  • vue 是先渲染 template 还是 script 呢?
    在Vue中,模板(template)和脚本(script)是同时被处理的,而不是按顺序渲染的。Vue的渲染流程如下:1.解析模板:Vue首先会解析模板中的HTML结构,并识别出模板中的指令和插值表达式。2.创建虚拟DOM:基于解析的模板,Vue会创建一个虚拟DOM树。3.执行脚本:Vue会执行组件实例的脚本部分,其中包括生命周......
  • vue 实现input框的宽度自适应?
    要实现Vue中input框的宽度自适应,可以使用CSS的`width`属性和Vue的数据绑定来实现。下面是一个简单的示例:1.在Vue组件的模板中,使用一个div包裹input框,并为该div设置一个类名,例如:```html<template> <divclass="input-wrapper">  <inputtype="text"v-model="inputValue"> ......
  • Vue源码学习(七):合并生命周期(混入Vue.Mixin)
    好家伙, 1.使用场景现在来,来想一下,作为一个使用Vue的开发者,假设现在我们要使用created(),我们会如何使用1.1. .vue文件中使用<template><div><h1>{{message}}</h1></div></template><script>exportdefault{created(){this.message='......
  • HBuilder打包vue2.0项目生成的APK空白(已解决)
    1、config下面的index.js中bulid模块导出的路径,因为index.html里边的内容都是通过script标签引入的,而路径不对,打开肯定是空白的。先看一下默认的路径。build:{//Templateforindex.html//Paths需要修改的是这里的路径index:path.resolve(__dirname,'........
  • vue2.0 项目创建和配置
    项目的框架概述:前端:1、采用vue2.02、采用elementui后端:1、Jave一、前端1、创建项目vuecreateweb_admin创建成功后的项目结构2、安装elementui指定版本[email protected]、在main.js入口文件引入elementui插件importVuefrom'vue'importAppfro......
  • 【微信小程序】【Demo】Picker模糊查询组件
    微信小程序Picker模糊查询组件 pickerSelect.jsComponent({options:{//在组件定义时的选项中启用多slot支持multipleSlots:true},/***组件的属性列表*/properties:{//父组件传递过来的数据列表items:{type:Array,......
  • vue-计算属性、监听属性、生命周期钩子函数
    计算属性1.计算属性是基于他们的依赖变量进行缓存的2.计算属性只有在它相关依赖变量发生改变时才会重新求值,否则不会变(函数只要页面变化,就会重新运算)3.计算属性就像python中的property,可以把方法/函数伪装成属性4.计算属性,必须有返回值 实现输入input中后名字首字母大写......
  • 安装node、npm和vue3
    1.首先安装node和npmnode.js安装地址https://nodejs.org/en/download/2.下载完安装好后,打开终端命令验证是否安装成功node-vnpm-v3.安装vue3npminstall-g@vue/cli4.创建vue3项目npmcreate【your-project-name】这一指令将会安装并执行create-vue,它是......
  • Vue之后端交互、计算、监听、组件间通信
    一、与后端交互三种方式1、2、3、4、小电影案例html:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="https://cdn.jsdelivr.net/npm/vue/dist/vue.js&q......