首页 > 其他分享 >Vue基础 · 组件的使用(4)

Vue基础 · 组件的使用(4)

时间:2022-12-20 21:22:56浏览次数:41  
标签:function Vue refs 基础 number 组件 data

组件

  • 将公用的功能抽离出来,形成组件;目的:复用代码。

1.1 全局组件

<div id="app">

    <!--引用组件,可多次引用-->
    <demo></demo>

</div>

<script src="../js/vue.js"></script>

<script>
    // 全局组件,第一个参数:自定义名称,第二个:{ }
    Vue.component('demo',{
        // 接收的是字符串
        // 已完成组件的注册
        template:'<h1>test</h1>'
    })

    new Vue({
        el:'#app'
    })
</script>
</body>

 我们可以看到,现在前端在div中所显示的是【<h1>test</h1>】,而我们在源码中是【<demo></demo>】,所以<demo></demo>就是我们所创建的全局组件demo,当我们引用时,就会显示【template】定义的值

1.2全局组件中的data使用

<body>
<div id="app">

    <!--引用组件-->
    <demo></demo>

</div>

<script src="../js/vue.js"></script>

<script>
    // 全局组件,第一个参数:自定义名称,第二个:{ }
    Vue.component('demo',{
        // 接收的是字符串
        // 已完成组件的注册
        template:'<h1>msg</h1>',
        // 组件中的data,必须是个方法,如是dict,当有改动时,其他页面有同时在使用的同时也会改变,使用了方法后,因作用域限制,只会作用于vue,其他数据不会变化
        data:function () {
            return{
                msg:'msg'
            }
        }
    })

    new Vue({
        el:'#app'
    })
</script>
</body>

效果展示:

 1.3全局组件中methods的绑定使用

<body>
<div id="app">

    <!--引用组件-->
    <demo></demo>
    <demo></demo>

</div>

<script src="../js/vue.js"></script>

<script>
    // 全局组件,第一个参数:自定义名称,第二个:{ }
    Vue.component('demo',{
        // 接收的是字符串
        // 已完成组件的注册
        template:'<h1 @click="change">{{msg}}</h1>',
        // 组件中的data,必须是个方法
        data:function () {
            return{
                msg:'msg'
           }
        },
        methods:{
            change:function () {
                this.msg = 'test'
            }
        }
    })

    new Vue({
        el:'#app',
    })
</script>
</body>

 前端页面默认显示:

 点击:第一个【msg】后显示:

1.4 全局组件定义后被引用

<body>
<div id="app">

    <test></test>

</div>

<script src="../js/vue.js"></script>
<script>

    Vue.component('test',{
        template:'<div><span>全局组件:{{number}}</sapn>\</div>',
        data:function () {
             return{
                 number: 0
             }
        }
    })

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

展示:

2、$refs

  • 主要应用于有组件时

 this.$refs:获取resf的属性,属性就是当前页面:所有定义了ref属性的这一个标签,等同于document.getElementById()

<body>
<div id="app">

    <div ref="test"></div>
    <input type="button" value="test" @click="change">

</div>

<script src="../js/vue.js"></script>
<script>
    new Vue({
        el:'#app',
        data:{

        },
        methods:{
            change:function () {
                // 获取resf的属性,属性就是当前页面:所有定义了ref属性的这一个标签
                console.log(this.$refs)
            }

        }
    })
    
</script>
</body>

前端展示:

 2.1 this.$refs.xxx

<body>
<div id="app">

    <div id="i1" ref="test">ref=test</div>
    <input type="button" value="test" @click="change">

</div>

<script src="../js/vue.js"></script>
<script>
    new Vue({
        el:'#app',
        data:{

        },
        methods:{
            change:function () {
                // 获取resf的属性,属性就是当前页面:所有定义了ref属性的这一个标签
                // this.$refs.test相当于是document.getElementById('i1')
                console.log('this.$refs.test--->',this.$refs.test)
                console.log("document.getElementById('i1')--->",document.getElementById('i1'))
            }

        }
    })

</script>
</body>

2.2 refs属性使用后所携带的方法

<body>
<div id="app">

    <test ref="a"></test>
    <input type="button" value="test" @click="change">

</div>

<script src="../js/vue.js"></script>
<script>

    Vue.component('test',{
        template:'<div><span @click="add">子组件:{{number}}</sapn>\</div>',
        data:function () {
             return{
                 number: 0
             }
        },
        methods: {
            add:function () {
                // number++: 表示每次+1
                this.number++
            }
        }
    })

    new Vue({
        el:'#app',
        data:{
            count:0
        },
        methods:{
            change:function () {
                console.log('this.$refs--->',this.$refs)
            }

        }
    })

</script>
</body>

 

 可以拿到number,这么一来,我们就可以获取到number:

    new Vue({
        el:'#app',
        data:{
            count:0
        },
        methods:{
            change:function () {
                console.log('this.$refs.a.number--->',this.$refs.a.number)
            }

        }
    })

通过绑定ref属性,如果是组件,就可以获取到全局组件中data的任意一个值

 2.3 通过获取 ref 中number 实现运算

<body>
<div id="app">

    <test ref="a"></test>
    <test ref="b"></test>
    <div>父组件:<span>{{count}}</span></div>
    <input type="button" value="test" @click="change">


</div>

<script src="../js/vue.js"></script>
<script>

    Vue.component('test',{
//绑定add后,每次点击会+1 template:'<div><span @click="add">子组件:{{number}}</sapn>\</div>', data:function () { return{ number: 0 } }, methods: { add:function () { // number++: 表示每次+1 this.number++ } } }) new Vue({ el:'#app', data:{ count:0 }, methods:{ change:function () { // this.$refs.a.number:获取到a的number值 this.count = this.$refs.a.number +this.$refs.b.number } } }) </script> </body>

 

 

 


 

标签:function,Vue,refs,基础,number,组件,data
From: https://www.cnblogs.com/brf-test/p/16990703.html

相关文章

  • 多对多三种创建方式、django内置序列化组件
    内容概要ajax补充说明多对多三种创建方式django内置序列化组件(drf前身)ORM批量操作数据(ORM操作优化)自定义分页器form组件内容详细ajax补充说明主要是针......
  • 前端工程化Vue-cli
    六前端工程化vue-cliVue是渐近式框架,你可以用它一个功能,也可以用全家桶。前面的章节中,我们是在html中引入vue.js,只用它核心的数据绑定功能。但基于vue的扩展还有很多,......
  • ajax补充知识点、多对多外键的三种创建方式、django内置序列化组件、批量操作数据、分
    今日内容ajax补充说明主要是针对回调函数args接收到的响应数据1.后端request.is_ajax() 用于判断当前请求是否由ajax发出2.后端返回的三板斧都会被args接收不在影......
  • Django框架:内置组件
    目录一、django内置序列化组件1.前夕2.序列化组件二、批量操作数据1.循环插入2.orm提供的操作三、分页器1.分页器思路2.自定义分页器使用四、form组件1.功能2.自动校验数据......
  • Django框架:10、Ajax补充说明、多对多三种创建方法、Django内置序列化组件、批量操作数
    Django框架目录Django框架一、Ajax补充说明1、针对前端回调函数接受值的说明二、多对多三种创建方式1、自动创建2、纯手动创建3、半自动创建三、Django内置序列化组件四......
  • Ajax补充说明 Django内置序列化组件 ORM批量操作数据 分页器 form组件
    目录Ajax补充说明1.后端request.is_ajax()2.后端返回的三板斧都会被args接收不再影响整个浏览器页面3.选择使用ajax做前后端交互的时候后端一般返回的都是字典数据多对多......
  • 构成 Spring Web 服务的各种组件(二)
    6.在客户端上使用SpringWeb服务Spring-WS提供了一个客户端Web服务API,允许对Web服务进行一致的XML驱动访问。它还迎合了编组程序和取消编组程序的使用,以便服务层代码可以......
  • 基础语法
    基础语法标签(空格分隔):python目录基础语法1,注释2,数字2.1整数int2.2浮点数float2.3复数complex3,字符串3.1字符串的定义3.2字符串的r前缀和f前缀3.3字符串拼接4,转义......
  • Vue 中的 Todo-list 案例
    Vue中的 Todo-list案例1:示例​​​​总结TodoList案例组件化编码流程:(1).拆分静态组件:组件要按照功能点拆分,命名不要与html元素冲突。(2).实现动态组件:考虑好数据的存......
  • django组件
    django内置序列化组件(drf前身)"""前后端分离的项目,视图函数只需要返回json格式的数据即可"""fromapp01importmodelsfromdjango.httpimportJsonResponsedefab......