Vue非单文件组件

1、基本使用

Vue中使用组件的三大步骤:

        一、定义组件(创建组件)

        二、注册组件

        三、使用组件(写组件标签)

        一、如何定义一个组件?

            使用Vue.extend(options)创建,其中options和new Vue(options)时传入的那个options几乎一样, 但也有点区别

            区别如下:

                1.e1不要写,为什么? -最终 所有的组件都要经过一个vm的管 理,由vm中的e1决定服务哪个容器

                2. data必须写成函数,为什么? _避 免组件被复用时,数据存在引用关系。

            备注:使用template 可以配置组件结构。

       

        二、如何注册组件?

            1.局部注册:靠new Vue的时候传入components选项

            2.全局注册:靠Vue.component('组件名’,组件)

        三、编写组件标签:

        <school></school>

<body>
    <div id="root">
        <!-- 第三步:编写组件标签 -->
        <xuexiao></xuexiao>
        <hr>
        <!-- 第三步:编写组件标签 -->
        <xuesheng></xuesheng>
    </div>


    <script>
        //阻止vue在启动时生成生产提示
        Vue.config.productionTip = false;


        // 第一步:创建
        // 创建school组件
        const school = Vue.extend({

            template:`
                <div>
                    <h2>学校名称:{{schoolName}}</h2>
                    <h2>学校地址:{{address}}</h2>
                    <button @click="showName">点我提示学校名</button>
                </div>
            `,

            // el:"#root",// 组件定义时 不用
            data(){
                return {
                    schoolName:'尚硅谷',
                    address:'北京',
                }
            }
        })

        // 创建student组件
        const student = Vue.extend({

            template:`
                <div>
                    <h2>学生姓名:{{studentName}}</h2>
                    <h2>学生年龄:{{age}}</h2>
                </div>
            `,

            // el:"#root",
            // 组件定义时 不用
            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",
            // 第二步:注册组件(局部注册)
            components:{
                xuexiao:school,
                xuesheng:student
            },
            methods:{
                showName(){
                    alert(this.schoolName)
                }
            }
        })

    </script>
</body>

2、几个注意点

几个注意点:

        1.关于组件名:

            一个单词组成:

                第一种写法(首字母小写): school

                第二种写法(首字母大写): School

            多个单词组成:

                第一种写法(kebab-case命名): my-school

                第二种写法(CamelCase命名): MySchool ( 需要Vue脚手架支持)

            备注:

                (1).组件名尽可能回避HTML中已有的元素名称,例如: h2、H2都不行。

                (2).可以使用name配置项指定组件在开发者工具中呈现的名字。

       

        2.关于组件标签:

            第种写法: <school></school>

            第二种写法: <school/>

            备注:不用使用脚手架时,<schoo1/>会导致后续组件不能渲染。

       

        3.一个简写方式:

            const school = Vue . extend(options)可简写为: const school = options

<body>
    
    <div id="root">
        <h1>{{msg}}</h1>
        <school></school>
        <!-- 自闭和脚手架模式下 -->
        <school/>
    </div>

    <script>
        //阻止vue在启动时生成生产提示
        Vue.config.productionTip = false;

        // 定义组件
        const s = Vue.extend({
            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>
</body>

3、组件嵌套

<body>
    <div id="root">
        <!-- <app></app> -->
    </div>

    <script>
        //阻止vue在启动时生成生产提示
        Vue.config.productionTip = false;
        
        // 定义student组件
        const student = Vue.extend({
            name:'student',
            template:`
                <div>
                    <h2>学生名称:{{name}}</h2>
                    <h2>学生年龄:{{age}}</h2>
                </div>
            `,
            data(){
                return {
                    name:'张三',
                    age:18
                }
            }
        })

        // 定义school组件
        const school = Vue.extend({
            name:'school',
            template:`
                <div>
                    <h2>学校名称:{{name}}</h2>
                    <h2>学校地址:{{address}}</h2>
                    <student></student>
                </div>
            `,
            data(){
                return {
                    name:'尚硅谷',
                    address:'北京'
                }
            },
            // 局部注册组件
            components:{
                student
            }
        })

        // 定义hello组件
        const hello = Vue.extend({
            template:`
                <h1>{{msg}}</h1>
            `,
            data(){
                return {
                    msg:'欢迎来到人世间'
                }
            }
        })
        
        // 定义app组件
        const app = Vue.extend({
            template:`
                <div>
                    <school></school>
                    <hello></hello>
                    
                </div>
            `,
            components:{
                school,
                hello
            }
        })

        // 创建vm
        new Vue({
            template:`
                <app></app>
            `,
            el:"#root",
            // 局部注册组件
            components:{
                app
            }
        })
    </script>
</body>

4、VueComponent

关于VueComponent:

        1. school组件本质是一个名为VueComponent的构造函数,且不是程序员定义的,是Vue. extend生成的。

       

        2.我们只需要写<school/>或<school></school>, Vue解析时会帮我们创建school组件的实例对象,即Vue帮我们执行的: new VueComponent(options)。

       

        3.特别注意:每次调用Vue. extend,返回的都是一个全新的VueComponent!!!

       

        4.关于this指向:

            (1) .组件配置中:

                data函数、methods中 的函数、watch中 的函数、computed中 的函数它们的this均是[VueComponent实例对象]

            (2) .new Vue()配置中:

                data函数、methods中 的函数、watch中 的函数、computed中的函数它们的this均是[Vue实例对象]。

       

        5. VueComponent的实例对象,以后简称vc (也可称之为:组件实例对象)。

            Vue的实例对象,以后简称vm。

5、一个重要的内置组件

    1.一个重要的内置关系: VueComponent.prototype.__proto__ === Vue.prototype

    2.为什么要有这个关系:让组件实例对象(vc)可以访问到Vue原型上的属性、方法

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要进行 Vue文件组件开发,你需要按照以下步骤进行操作: 1. 安装 Vue CLI:首先,你需要装 Vue CLI,它一个用于快速搭建 Vue.js 项目的工具。你可以在命令行中运行以下命令进行安装: ``` npm install -g @vue/cli ``` 2. 创建新项目使用 Vue CLI 创建一个新的 Vue 项目,你可以在命令行中运行以下命令: ``` vue create my-project ``` 这将引导你选择一些配置选项,如包管理器、特性预设等。 3. 创建单文件组件:在 Vue 项目中,每个组件通常被封装在一个单独的文件中,这就是所谓的单文件组件。在你的项目目录中,创建一个以 `.vue` 为扩展名的文件,比如 `MyComponent.vue`。 4. 编写单文件组件代码:在新创建的 `.vue` 文件中,你可以通过以下方式编写组件的代码: ```vue <template> <!-- 组件的模板部分 --> </template> <script> // 组件的逻辑部分 </script> <style> /* 组件的样式部分 */ </style> ``` 在 `<template>` 标签中编写组件的模板部分,使用 Vue 的模板语法来定义组件的结构。在 `<script>` 标签中编写组件的逻辑部分,比如定义组件的数据、方法等。在 `<style>` 标签中编写组件的样式部分。 5. 在其他组件或页面中使用组件:在其他组件或页面中,你可以通过引入和注册单文件组件的方式来使用它。比如,在一个父组件中引入和使用 `MyComponent` 组件: ```vue <template> <div> <my-component></my-component> </div> </template> <script> import MyComponent from './path/to/MyComponent.vue'; export default { components: { MyComponent } } </script> ``` 通过 `import` 语句引入 `MyComponent` 组件,并在 `components` 属性中注册该组件,然后就可以在模板中使用它了。 这就是进行 Vue文件组件开发的基本步骤。你可以根据自己的需求,编写更复杂的单文件组件,并在项目中灵活地使用它们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值