首页 > 其他分享 >[Vue]组件入门——非单文件组件

[Vue]组件入门——非单文件组件

时间:2023-11-02 09:15:04浏览次数:52  
标签:school Vue extend 非单 组件 new options

  Vue中使用组件的三大步骤: 1. 定义组件(创建组件)     使用Vue.extend(options)创建,其中options和new Vue(options)时传入的options几乎一样,但有点区别:     (1) el不要写: 最终所有的组件都要经过一个vm的管理,由vm中的el决定服务哪个容器     (2) data必须写成函数: 避免组件被复用时,数据存在引用关系。     (3) 使用template配置组件结构。 2. 注册组件     (1) 局部注册: 靠new Vue的时候传入components(组件名)     (2) 全局注册: 靠Vue.component('组件名',组件) 3. 使用组件(写组件标签)     <school></school>  在dom中直接写组件,不要写成闭合标签   几个注意点 1. 关于组件名:     一个单词组成:     (1). 首字母小写: school     (2). 首字母大写: School     多个单词组成:     (1). kebab-case命名: my-school     (2). CamelCase命名: MySchool(需要Vue脚手架支持)     备注:     (1). 组件名尽可能回避HTML中已有的元素名称,例如: h2、H2都不行。     (2). 可以使用name配置项指定组件在开发者工具中呈现的名字。 2. 关于组件标签:     (1). <school></school>     (2). <school/>     备注: 不用使用脚手架时,<school/>会导致后续组件不能渲染。 3. 一个简写方式:     const school = Vue.extend(options)  可简写为:const school = options     vue在注册组件时有判断,如果传入的仅仅是配置项文件,vue会自动调用Vue.extend()   关于 Vue Component: 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(options)配置中:     data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是[Vue实例对象]。 5.Vue Component的实例对象,以后简称vc (也可称之为: 组件实例对象)。   Vue的实例对象,以后简称vm。   局部注册:

<body>
    <div id="root">
        <!-- 第3步:编写组件标签 -->
        <!-- 注意:在dom里面写组件不可以写成闭合标签! -->
        <school></school>
        <hr />
        <student></student>
    </div>
</body>
<script>
    // 第1步:创建组件 Vue.extend
    const school = Vue.extend({
        template: `
            <div>
                <h2> {{schoolName}}</h2>
                <h2> {{schoolAge}}</h2>
                <button @click="alter_school_name">点我提示学校名</button>
            </div>
        `,
        data: function () {
            return {
                schoolName: 'xx小学',
                schoolAge: 10
            }
        },
        methods: {
            alter_school_name: function () {
                alert(this.schoolName)
            }
        },
    })
    const student = Vue.extend({
        template: `
            <div>
                <h2> {{studentName}}</h2>
                <h2> {{studentAge}}</h2>
            </div>
        `,
        data: function () {
            return {
                studentName: '张三',
                studentAge: 8
            }
        }
    })
    let vm = new Vue({
        el: "#root",
        // 第2步:注册组件(局部注册) components
        components: { school, student },
        // 下面的写法也可以,但没必要
        // components: {
        //     student: student,
        //     school: school
        // },
    })
</script>

 

全局注册:

<body>
    <div id="root1">
        <!-- 第3步:编写组件标签 -->
        <hello></hello>
    </div>
    <div id="root2">
        <hello></hello>
    </div>
</body>
<script>
    // 第1步:创建组件 Vue.extend
    const hello = Vue.extend({
        template: `
            <div>
                <h2>你好! {{name}}</h2>
            </div>
        `,
        data: function () {
            return {
                name: '全局绑定'
            }
        }
    })
    // 第2步:注册组件(全局注册)Vue.component('组件名', 组件名)
    Vue.component('hello', hello)
    let vm1 = new Vue({
        el: "#root1",
    })
    let vm2 = new Vue({
        el: '#root2'
    })
</script>

 

标签:school,Vue,extend,非单,组件,new,options
From: https://www.cnblogs.com/ximu1009/p/17779517.html

相关文章

  • 手撕Vuex-实现actions方法
    经过上一篇章介绍,完成了实现mutations的功能,那么接下来本篇将会实现actions的功能。本篇我先介绍一下actions的作用,然后再介绍一下实现的思路,最后再实现代码。actions的作用是用来异步修改共享数据的,怎么异步修改,这个时候我们回到Vue的官方Vuex文档中,有如下这么一......
  • vue打包后导致css属性值丢失的问题如何处理?
    当使用Vue进行打包时,有时可能会出现CSS属性值丢失的问题。这通常是由于CSS的压缩和优化过程导致的。下面是一些可能的解决方案:关闭CSS的压缩和优化:在Vue的配置文件(vue.config.js)中,你可以通过添加以下配置来关闭CSS的压缩和优化:module.exports={css:{extract:false,......
  • 【keng】 Vue2 多次传参进入同一页面 页面不走生命周期函数
    比如一个搜索跳转功能 搜索123进入页面加载数据再次搜索456 还是进入这个页面这个页面就不会走生命周期了 解决方案在App.vue上为router-view增加一个key 这个key就是随便写一个随机数就可以不要重复eg:  ......
  • Vue动态添加style样式
    最近在用uniapp开发安卓app,由于语法跟vue一致,就梳理了下动态添加style的方法:Object :style="{fontSize:fontSize+'px'}":style="{fontSize:(fontSize?fontSize:'12')+'px'}" Array :style="[baseStyles,otherStyle......
  • 如何在Vue组件中访问Vuex store中的状态?
    在Vue组件中访问Vuexstore中的状态,可以通过计算属性(computedproperties)或者直接通过$store.state来实现。下面是两种常见的方法:1:使用计算属性(computedproperties):在Vue组件中,定义一个计算属性来获取Vuexstore中的状态。计算属性会根据状态的变化自动更新。exportdefaul......
  • MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。
    Buildingtheprojectsinthissolutiononeatatime.Toenableparallelbuild,pleaseaddthe"/m"switch.Buildstarted2021/3/170:22:07.Project"D:\t\node_modules\node-sass\build\binding.sln"onnode1(defaulttargets).Validat......
  • Vue 的最大的优势是什么?
    Vue作为一款轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度快,并且作者是中国人尤雨溪,对应的API文档对国内开发者优化,作为前端开发人员的首选入门框架Vue的优势:Vue.js可以进行组件化开发,使代码编写量大大减少,读者更加易于理解。Vue.j......
  • Vue学习
    tips-1vue组件的根标签只能有一个<div>正确示例如下:<template> <div> </div></template>错误示例如下:<template> <div> </div> <div> </div> <div> </div></template>tips-2资源路径获取在启动vue项......
  • vue 在模板/v-bind中使用方法methods 的问题
    每当渲染发生时,就会调用该方法并运行该函数。每次组件渲染时都会运行。模板中的函数调用会带来更大的性能成本。(相比computed)每次组件重新渲染时,vue模板中调用的函数都会执行。如果这些函数的计算成本很高,它们可能会降低应用程序的性能。你不希望这样,是吗?......
  • hadoop 基础组件详解
           ......