首页 > 其他分享 >Vue非单文件组件

Vue非单文件组件

时间:2022-12-25 15:24:30浏览次数:37  
标签:school Vue const name 非单 组件 data

 非单文件组件

 就是一个文件中有多个组件 

Vue中使用组件的三大步骤:                     一、定义组件(创建组件)                     二、注册组件                     三、使用组件(写组件标签)
            一、如何定义一个组件?                         使用Vue.extend(options)创建,其中options和new Vue(options)时传入的那个options几乎一样,但也有点区别;                         区别如下:                                 1.el不要写,为什么? ——— 最终所有的组件都要经过一个vm的管理,由vm中的el决定服务哪个容器。                                 2.data必须写成函数,为什么? ———— 避免组件被复用时,数据存在引用关系。                         备注:使用template可以配置组件结构。
            二、如何注册组件?                             1.局部注册:靠new Vue的时候传入components选项                             2.全局注册:靠Vue.component('组件名',组件)
            三、编写组件标签:                             <school></school>

 示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>基本使用</title>
        <script type="text/javascript" src="../js/vue.js"></script>
    </head>
    <body> 
        <!-- 准备好一个容器-->
        <div id="root">
            <hello></hello>
            <hr>
            <h1>{{msg}}</h1>
            <hr>
            <!-- 第三步:编写组件标签 -->
            <school></school>
            <hr>
            <!-- 第三步:编写组件标签 -->
            <student></student>
        </div>

        <div id="root2">
            <hello></hello>
        </div>
    </body>

    <script type="text/javascript">
        Vue.config.productionTip = false

        //第一步:创建school组件
        const school = Vue.extend({
            template:`
                <div class="demo">
                    <h2>学校名称:{{schoolName}}</h2>
                    <h2>学校地址:{{address}}</h2>
                    <button @click="showName">点我提示学校名</button>    
                </div>
            `,
            // el:'#root', //组件定义时,一定不要写el配置项,因为最终所有的组件都要被一个vm管理,由vm决定服务于哪个容器。
            data(){
                return {
                    schoolName:'ceshi',
                    address:'北京昌平'
                }
            },
            methods: {
                showName(){
                    alert(this.schoolName)
                }
            },
        })

        //第一步:创建student组件
        const student = Vue.extend({
            template:`
                <div>
                    <h2>学生姓名:{{studentName}}</h2>
                    <h2>学生年龄:{{age}}</h2>
                </div>
            `,
            data(){
                return {
                    studentName:'张三',
                    age:18
                }
            }
        })
        
        //第一步:创建hello组件
        const hello = Vue.extend({
            template:`
                <div>    
                    <h2>你好啊!{{name}}</h2>
                </div>
            `,
            data(){
                return {
                    name:'Tom'
                }
            }
        })
        
        //第二步:全局注册组件
        Vue.component('hello',hello)

        //创建vm
        new Vue({
            el:'#root',
            data:{
                msg:'你好啊!'
            },
            //第二步:注册组件(局部注册)
            components:{
                school,
                student
            }
        })

        new Vue({
            el:'#root2',
        })
    </script>
</html>

 

结果:

几个注意点   1.关于组件名:             一个单词组成:                         第一种写法(首字母小写):school                         第二种写法(首字母大写):School             多个单词组成:                         第一种写法(kebab-case命名):my-school                         第二种写法(CamelCase命名):MySchool (需要Vue脚手架支持)             备注:                     (1).组件名尽可能回避HTML中已有的元素名称,例如:h2、H2都不行。                     (2).可以使用name配置项指定组件在开发者工具中呈现的名字。
2.关于组件标签:             第一种写法:<school></school>             第二种写法:<school/>             备注:不用使用脚手架时,<school/>会导致后续组件不能渲染。
3.一个简写方式:             const school = Vue.extend(options) 可简写为:const school = options 
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>几个注意点</title>
        <script type="text/javascript" src="../js/vue.js"></script>
    </head>
    <body> 
        <!-- 准备好一个容器-->
        <div id="root">
            <h1>{{msg}}</h1>
            <school></school>
        </div>
    </body>

    <script type="text/javascript">
        Vue.config.productionTip = false
        
        //定义组件
        const s = Vue.extend({
            name:'atguigu',
            template:`
                <div>
                    <h2>学校名称:{{name}}</h2>    
                    <h2>学校地址:{{address}}</h2>    
                </div>
            `,
            data(){
                return {
                    name:'尚硅谷',
                    address:'北京'
                }
            }
        })

        //简写
        const s1 =  {
            name:'atguigu',
            template:`
                <div>
                    <h2>学校名称:{{name}}</h2>    
                    <h2>学校地址:{{address}}</h2>    
                </div>
            `,
            data(){
                return {
                    name:'尚硅谷',
                    address:'北京'
                }
            }
        }
 

        new Vue({
            el:'#root',
            data:{
                msg:'欢迎学习Vue!'
            },
            components:{
                school:s
            }
        })
    </script>
</html>

 

  

标签:school,Vue,const,name,非单,组件,data
From: https://www.cnblogs.com/anjingdian/p/17004059.html

相关文章

  • 漏洞实战部分3-ContentProvider组件的openFile接口问题
    前期回顾可以关注微信公众号安卓应用漏洞学习case3本课程学习ContentProvider组件的openFile接口。ContentProvider组件主要作用实现各个应用程序之间的数据共享。可以把......
  • 03:Maven 私服 nexus服务器 – 本地仓库访问私服 & IDEA访问私服与组件上传
    1.本地仓库访问私服1.1访问流程1.2配置本地仓库访问私服1.2.1找到Maven的配置文件用记事本打开    1.2.2配置访问服务器的权限,用户名密码setting......
  • Vue 中的 nextTick 有什么作用?
    大家好,我是CoderBin前言这段时间在写Vue的项目,有些地方难免会用到nextTick的地方,所以本文将浅析nextTick的作用、使用场景和背后的原理实现,希望对大家有所帮助,谢谢!如果文......
  • Unity内置JSON组件反序列化JSON数据
    Json数据如下:{"data":[{"id":141,"layoutLabel":"Sameer","hasCustomProb":1},{"id":......
  • Vue生命周期
     生命周期    1.又名:生命周期回调函数、生命周期函数、生命周期钩子。   2.是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数。   3.生命周期函数......
  • vue3项目,记录我是如何用1h实现产品预估1天工作量的界面需求
    最近在编写前端界面,硬是一人一周时间加班加点写完了一个项目的前端界面(一级菜单有12个页面+一个控制台大屏,二三级界面有N个),之前预估前端界面的编写需要一个月,我是自己把......
  • Vue + SpreadJS 实现高性能数据展示与分析
    Vue+SpreadJS实现高性能数据展示与分析在前端开发领域,表格一直都是一个高频使用的组件,尤其是在中后台和数据分析场景下。但当一屏展示数据超过1000条数据记录时,会出现浏......
  • Vue 自定义指令
    自定义指令-函数式需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。<!DOCTYPEhtml><html><head><metacharset="UTF-8"/>......
  • Vue之v-cloak指令
    v-cloak指令(没有值):            1.本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。            2.......
  • Vue之v-once指令
    v-once指令             1.v-once所在节点在初次动态渲染后,就视为静态内容了。            2.以后数据的改变不会引......