vue学习笔记04

 学习的课程地址:老杜Vue视频教程,Vue2,Vue3实战精讲,一套通关vue_哔哩哔哩_bilibili

1、vue程序初体验

2、vue核心技术(基础)

前面参见:

vue学习笔记01

vue学习笔记02

vue学习笔记03

3、Vue组件化

3.1什么是组件化开发

(1)传统应用存在的问题:

        a、关系纵横交织,复杂,牵一发动全身,不利于维护。

        b、代码虽然复用,但复用效率不高。

(2)组件化方式开发的应用

        使用组件化方式开发解决了以上的两个问题:

        a、每一个组件都有独立的js,独立的css,这些独立的js和css只供当前组件使用,不存在纵横交错。

        b、代码复用新增强。组件不仅让js css复用了,HTML代码片段也复用了(因为要使用组件直接引入组件即可)。

(3)什么是组件?

        a、组件:实现应用中局部功能的代码和资源的集合。凡是采用组件方式开发的应用都可以称为组件化应用。

        b、模块:一个大的js文件按照模块化规则进行拆分,生成多个js文件,每一个js文件叫做模块。凡是采用模块方式开发的应用都可以称为模块化应用。

        c、任何一个组件中都可以包含这些资源:HTML CSS JS 图片 声音 视频等。从这个角度也可以说明组件是可以包括模块的。

3.2第一个组件

(1)组件使用分三步:

        第一步:创建组件

                Vue.extend({该配置项和new Vue的配置项几乎相同,略有差别})

                区别1:创建Vue组件的时候,配置项中不能使用el配置项。(但是需要使用template配置项来配置模板语句)

                区别2:配置项中的data不能使用直接对象的形式,必须使用function。(确保组件复用的时候,data数据是单独的一份,不相互影响)

<script>
    const myComponet = Vue.extend({
        template: `
        <ul>
            <li v-for="(user,index) of users" :key="user.id">
                {{index}},{{user.name}}
            </li>
        <ul>
        `,
        data(){
            return {
                user:[
                    {id:'001',name:'jack'},
                    {id:'002',name:'lucy'},
                    {id:'003',name:'james'}
                ]
            }
        }
    })
</script>

        第二步:注册组件:

                局部注册,只能在注册的vm中可以使用

                语法是:在components配置项中

                        组件名字:(定义组件时的接收变量。如:userlist:myComponent

const vm = new Vue({
    el:'#app',
    data:{
        msg:'第一个组件'
    },
    components:{
        userlist:myComponent
    }
})

                全局注册:在Vue实例创建之前注册

                语法是:Vue.component('组件名',组件对象)。如:Vue.component('userlogin',userLoginComponent)

        第三步:使用组件

<userlist></userlist>
<userlist></userlist>

(2)小细节:

        a、在Vue当中是可以使用自闭合标签的,但是前提必须是脚手架环境中使用。

        b、创建Vue组件的时候Vue.extend()可以省略。const myComponent={},但是底层实际还是会在注册组件的时候调用的。

        c、组件的名字:不要使用HTML内置的标签名。

        第一种:全部小写;

        第二种:首字母大写,后面都是小写;

        第三种:kebab-case命名法(串式命名法,如:user-login);

        第四种:CamelCase命名法(驼峰式命名法,如:UserLogin)。但是这种方式只允许在脚手架环境中使用。

        在创建组件的时候,通过配置项配置一个name,这个name不是组件的名字,是设置Vue开发者工具中显示的组件的名字。

3.3组件嵌套

(1)组件在哪里注册,就在哪里使用。

(2)template配置项只能有一个根标签。

(3)对象里面的key和value同名的话,:value可以省略,如:{app:app}=>{app}

3.4VueComponent

简称:vc

(1)new Vue({})配置项中的this和Vue.extend({})配置项中的this他们分别是谁?

new Vue({})中的this是Vue实例;Vue.extend({})中的this是VueComponet实例。

Vue.extend()执行结果的返回值是:是一个全新的构造函数,VueComponent构造函数。(因为var sub 是局部变量)

通过构造函数,创建对象new user()实例化。Vue在解析到<user></user>标签时就会创建VueComponent对象,再用一次就会再创建一个,里面的this就是该对象实例。

3.5prototype,__proto__原型对象

(1)基础知识

构造函数有个prototype属性,叫作显式的原型属性,通过显式的原型属性可以获取原型对象。

通过构造函数可以创建实例,对于实例它有一个隐式的原型属性:__proto__,同样可以拿到原型对象。

原型对象只有一个。

注意:显示的(建议程序员使用的)。隐式的(不建议程序员使用的)

1. **基本理解**

- 想象一下,JavaScript中的对象就像一个个小机器人。每个小机器人(对象)都有自己的一些本领(属性和方法)。但是呢,有些本领它们自己可能没有,这时候就要找它们的“师傅”(原型对象)来帮忙。 - 比如说,你有一个对象`obj`,当你想让它做某件事(调用一个属性或者方法)的时候,它会先看看自己会不会。如果不会,就会去问它的原型对象:“师傅,你会这个吗?” - 例如,`let obj = {};`这个空对象就像一个刚出厂啥也不会的小机器人。它的原型对象是`Object.prototype`,就像是它的师傅,教它一些基本的东西,像`toString`方法,当你想把这个对象转成字符串的时候,它自己没有这个方法,就会从它的师傅(原型对象)那里学到。

2. **函数和原型对象的关系**

- 函数在JavaScript里就像是一个“机器人制造工厂”。当你定义一个函数,比如`function Person() {}`,这个函数有一个特殊的地方,就是它有一个自己的“模具”(`prototype`属性指向的原型对象)。 - 当你用`new`这个关键字来调用这个函数(就像是启动工厂生产机器人),生产出来的小机器人(对象)就会以这个“模具”作为自己的师傅(原型对象)。 - 比如,`let p = new Person();`这个`p`对象的原型对象就是`Person.prototype`。这就好比工厂`Person`生产出来的机器人`p`,它的师傅就是工厂`Person`的那个“模具”。

3. **原型对象用于继承**

- 继承就像是家族传承。假设`Animal`是一个大家族,家族里有一些本领(属性和方法),比如`Animal`家族有一个本领是发出声音(`makeSound`方法),还有一个特征是有物种类型(`species`属性)。 - 现在有一个`Dog`小家族,想继承`Animal`大家族的本领。我们就可以让`Dog`家族的原型对象(也就是它们的师傅)是`Animal`家族的一个成员(`Dog.prototype = new Animal();`)。 - 这样,`Dog`家族的成员(通过`new Dog()`创建的对象)就可以学到`Animal`家族的本领了,比如`myDog.species`能得到`Animal`家族的物种类型,`myDog.makeSound`也能发出`Animal`家族的那种声音。

4. **修改原型对象的影响**

- 还是用机器人来举例。如果有一个“机器人制造工厂”(函数)叫`Car`,生产了两个机器人(对象)`car1`和`car2`。 - 当工厂的“模具”(`Car.prototype`)被修改了,比如给模具加上了一个颜色属性(`Car.prototype.color = "red";`),那么已经生产出来的机器人`car1`和`car2`都会学到这个新本领(它们的原型对象被修改了),都有了颜色属性。 - 但是,如果只是单独给`car1`这个机器人加了一个属性(`car1.type = "big";`),就像给它单独装了一个新零件,这个属性就只有`car1`有,`car2`是没有这个属性的,因为`car2`没有被单独改装,它还是按照工厂的“模具”(原型对象)来的。

(2)应用

给vue的原型对象扩展一个counter属性,在vue的实例上可以访问的到,同时component的实例也可以访问的到。这样可以实现代码复用,vc有很多东西无需再写一遍了。

Vue.prototype.counter = 1000

console.log('vm.counter',vm.counter)//vm.counter 1000

console.log('vc.counter',this.counter)//vc.counter 1000

(3)底层原理:user.prototype.__proto__=vue.prototype: ture

 3.6单文件组件

注: vscode的Vue代码高亮显示插件:Vetur(作者:Pine Wu);

标签改前面,后面自动改插件:Auto Rename Tag(作者:Jun Han)

(1)单文件组件使用过程

a、创建组件,默认导出,export default

b、导入组件 import Y1 from './Y1.vue'  //Y1可以使用其他名字

注册组件 component :{Y1}

c、使用组件 <Y1></Y1>

(2)入口文件,main.js

import App from './App.uve'

new Vue({
    el:'#root',
    template:'<App></App>',
    components:{App}
})

(3)index.html

<body>
    <div id='root'></div>
    <script src='../js/vue.js'></scrip>
    <script src='./main.js'></script>
</body>

(4)要运行需要借助脚手架

a、下载、安装Node.js:https://nodejs.org/zh-cn/download/

b、dos命令窗口,输入npm命令:npm -version

c、安装脚手架Vue CLI

 

编译的时候不让脚手架检查语法

保存时是否进行语法检查,true表示检查,false表示不检查,默认值是true

vue.config.js详细配置参见官网文档:配置参考 | Vue CLI

后续参见:vue学习笔记05-优快云博客 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值