Vue.js (包含2.x和3.x) 总结03 (项目创建 / 启动、组件、组件传值)

4 篇文章 0 订阅
订阅专栏

目录

一、vue-cli 脚手架

1.安装vue-cli

2.创建项目

3.启动项目

4.拿到空项目怎么办?

1)删除默认内容

5.扩展

1)项目启动时为什么是npm run serve?

2.启动项目,浏览器自动开启、修改端口

二、组件化

1.组件

2.父子组件

3..vue文件使用时,之前的有关用法没有太大改变

4.样式污染

三、组件传值

1.正向传值

1) props属性

props验证

2.逆向传值

1) $emit() 自定义事件

2)

3.同胞/兄弟传值

4.跨组件传值


一、vue-cli 脚手架

就是项目的开发环境,方便快速集成在vue开发中的所有内容。

1.安装vue-cli

1.电脑上必须要有node

window+r ---> cmd ---> node -v ---> npm -v  (查看是否安装)

2.需要全局安装vue/cli脚手架( -g是全局下载,需要在新电脑或者重新安装node后,执行一次,之后不再需要),在cmd中输入如下命令:

npm install -g @vue/cli

3.确定安装是否成功

vue --version

2.创建项目

1.必须把cmd路径切换到想创建项目的地方

cd XXXXXX

或 文件夹右键,选择在集成终端打开

即可

2.vue create 项目名       创建项目

点击Enter,选择自定义

继续Enter,插件暂不选,直接Enter

可选3.x或2.x,(以3.x为例)

继续回车,直至

等待项目创建成功即可

3.启动项目

1.切换到项目路径下

2.npm run serve 启动项目

4.拿到空项目怎么办?

1)删除默认内容

1.src文件夹下 components文件夹下的Helloword.vue文件

2.删除app.vue如下内容:

5.扩展

1)项目启动时为什么是npm run serve?

项目的启动命令,在项目下的package.json文件中的scripts节点里面配置。

所有的单词,它对应的启动命令都是,npm run + 所配置的名字

唯独有个单词例外,即start。start这个单词启动时可以不加run

(终止操作,Ctrl+C)

2.启动项目,浏览器自动开启、修改端口

在项目下的vue.config.js中添加。

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  // 自动开启浏览器
  devServer:{
    open:true,
    host:"localhost",
    // 修改端口
    port:8899
  }
})

二、组件化

组件的本质就是自定义标签

1.组件

组件就是把一个项目的页面,拆分成一个个的小模块,通过这些可以复用的小模块,拼装成一个完整的页面。

1).vue文件,即单文件组件。

<template>
  写html
</template>

<script>
export default {
	写逻辑
}
</script>

<style>
	写样式
</style>

注:安装插件Vetur.

然后可快速创建单文件组件

2)在想使用的地方,引用、调用、使用即可

结果:

2.组件分类

1)全局组件 component

配置一次后,可在所有地方直接使用。(注:不可滥用全局组件,会造成组件名污染 )

需要把引用与调用写在main.js中

//引用

import BottomBar from "@/components/BottomBar.vue";

//调用

Vue.component("给要调用的组件起个名字", 调用的组件)

import Vue from 'vue'
import App from './App.vue'
import router from './router'

// 配置全局组件
import BottomBar from "@/components/BottomBar.vue";
Vue.component("BottomBar", BottomBar)
// Vue.component("给要调用的组件起个名字", 调用的组件)

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

2)局部组件 components

只在当前页面使用时,进行引用 调用 使用

3.父子组件

就是组件与组件之间的嵌套关系

结果:

4.vue文件使用时,之前的有关用法没有太大改变

data只能用函数式,不能用对象式

例如:

<template>
  <div>
    <h1>{{text}}</h1>
    <button @click="fun()">{{text1}}</button>
    <ul>
        <li v-for="(v,i) in arr" :key="i">
            {{v.name}}---{{v.age}}
        </li>
    </ul>
    <h1>{{upperText}}</h1>
  </div>
</template>

<script>
export default {
    // 只有data有写法上的要求,其他都一样
    // data只能用函数式,不能用对象式
    data(){
        return{
            text:"qwertyui",
            arr:[
                {name:"A",age:1},
                {name:"B",age:2},
                {name:"C",age:3},
                {name:"D",age:4}
            ],
            text1:"点击",
            text2:"cvghnj"
        }
    },
    methods:{
        fun(){
            this.text1="已完成"
        }
    },
    computed:{
        upperText(){
            return this.text2.toUpperCase();
        }
    }

}
</script>

<style>

</style>

5.样式污染

scoped属性来进行样式隔离,即当前样式仅对当前组件生效

<style scoped>

</style>

三、组件传值

父组件的数据默认情况下不能直接相互使用,因为组件与组件之间是一个完整的独立的个体

1.正向传值

1) props属性

父组件把数据传递给子组件

1.子组件设置接收props

export default {
    // 1.使用props定义接收参数
    props:["AAA","BBB"]
}

2.父组件传递

    <ZiDemo :AAA="传递的数据a" :BBB="传递的数据b" />

3.在子组件中使用

<span>{{AAA}}</span><span>{{BBB}}</span>

例子:

如下:

在App.vue中

<template>
    <div>
        <!-- 3.使用 -->
        <Fu/>
        <MiaoSha/>
    </div>
</template>
<script>
// 1.引用
import Fu from './components/JDItem/FuDemo.vue'
import MiaoSha from "./components/JDItem/MiaoSha.vue"
export default {
  name: 'App',
  components: {
    // 2.调用
    Fu,MiaoSha
  }
}
</script>
<style>
*{
    margin: 0px;padding: 0px;
}
</style>

在FuDemo.vue中

<template>
  <div class="content">
    <ZiDemo v-for="(v,i) in arr" :key="i" :title="v.title" :img="v.imgurl"></ZiDemo>
  </div>
</template>

<script>
import ZiDemo from "./ZiDemo"
export default {
    components:{
        ZiDemo
    },
    data(){
        return{
            arr:[
                {id:1,title:"AA",imgurl:"https://m15.360buyimg.com/mobilecms/jfs/t1/187640/12/30456/5256/639c2315Ebc95c142/350a8f0c766f5460.png"},
                {id:2,title:"BB",imgurl:"https://m15.360buyimg.com/mobilecms/jfs/t1/177902/16/13776/5658/60ec0e71E801087f2/a0d5a68bf1461e6d.png"},
                {id:3,title:"CC",imgurl:"https://m15.360buyimg.com/mobilecms/jfs/t1/186882/8/12149/5894/60ec1250E9335241a/b22054613aa8ae75.png"},
                {id:4,title:"DD",imgurl:"https://m15.360buyimg.com/mobilecms/jfs/t1/208529/13/35972/4081/6497ee53F4f8d38d9/c5267cb385f923fe.png"},
                {id:5,title:"EE",imgurl:"https://m15.360buyimg.com/mobilecms/jfs/t1/177902/16/13776/5658/60ec0e71E801087f2/a0d5a68bf1461e6d.png"},
                {id:6,title:"FF",imgurl:"https://m15.360buyimg.com/mobilecms/jfs/t1/208529/13/35972/4081/6497ee53F4f8d38d9/c5267cb385f923fe.png"},
                {id:7,title:"GG",imgurl:"https://m15.360buyimg.com/mobilecms/jfs/t1/186882/8/12149/5894/60ec1250E9335241a/b22054613aa8ae75.png"},
                {id:8,title:"OO",imgurl:"https://m15.360buyimg.com/mobilecms/jfs/t1/177902/16/13776/5658/60ec0e71E801087f2/a0d5a68bf1461e6d.png"},
                {id:9,title:"PP",imgurl:"https://m15.360buyimg.com/mobilecms/jfs/t1/177902/16/13776/5658/60ec0e71E801087f2/a0d5a68bf1461e6d.png"},
                {id:10,title:"QQ",imgurl:"https://m15.360buyimg.com/mobilecms/jfs/t1/186882/8/12149/5894/60ec1250E9335241a/b22054613aa8ae75.png"},
            ]
        }
    }
}
</script>

<style scoped>
.content{
    width: 100%;height: 200px;background-color: aquamarine;display: flex;flex-wrap: wrap;
}
</style>

在ZiDemo.vue中

<template>
  <div class="item">
    <img :src="img" >
    <br>
    <span>{{title}}</span>
  </div>
</template>

<script>
export default {
    // 1.使用props定义接收参数
    props:["title","img"]
}
</script>

<style>
    .item>img{width: 70px;}
    .item{text-align: center;}
</style>

在MiaoSha.vue中

<template>
  <div>
    <p>秒杀</p>
    <div class="slider">
        <MiaoShaItem v-for="(v,i) in arr" :key="i" :price="v.price" :img="v.imgurl"/>
    </div>
  </div>
</template>

<script>
import MiaoShaItem from "./MiaoShaItem.vue"
export default {
    components:{
        MiaoShaItem
    },
    data(){
        return{
            arr:[
                {price:11,imgurl:"https://m.360buyimg.com/seckillcms/jfs/t1/150751/26/27617/240337/64e48881F9b73d4d1/7515278c1cff7fa6.jpg"},
                {price:22,imgurl:"https://m.360buyimg.com/seckillcms/jfs/t1/106088/1/44673/169681/65012e13F7d8a7378/616262301330609d.jpg"},
                {price:33,imgurl:"https://m.360buyimg.com/seckillcms/jfs/t1/150751/26/27617/240337/64e48881F9b73d4d1/7515278c1cff7fa6.jpg"},
                {price:44,imgurl:"https://m.360buyimg.com/seckillcms/jfs/t1/106088/1/44673/169681/65012e13F7d8a7378/616262301330609d.jpg"},
                {price:55,imgurl:"https://m.360buyimg.com/seckillcms/jfs/t1/150751/26/27617/240337/64e48881F9b73d4d1/7515278c1cff7fa6.jpg"},
                {price:66,imgurl:"https://m.360buyimg.com/seckillcms/jfs/t1/106088/1/44673/169681/65012e13F7d8a7378/616262301330609d.jpg"},
                {price:77,imgurl:"https://m.360buyimg.com/seckillcms/jfs/t1/150751/26/27617/240337/64e48881F9b73d4d1/7515278c1cff7fa6.jpg"},
                {price:88,imgurl:"https://m.360buyimg.com/seckillcms/jfs/t1/106088/1/44673/169681/65012e13F7d8a7378/616262301330609d.jpg"},
                {price:99,imgurl:"https://m.360buyimg.com/seckillcms/jfs/t1/150751/26/27617/240337/64e48881F9b73d4d1/7515278c1cff7fa6.jpg"}
            ]
        }
    }
}
</script>

<style>
.slider{width:100%;height: 100px;display: flex;overflow-x: auto;}
</style>

在MiaoShaItem.vue中

<template>
  <div class="b">
    <img :src="img" >
    <br>
    <span>{{haha(price)}}</span>
  </div>
</template>

<script>
export default {
    props:["price","img"],
    methods:{
        haha(val){
            return "¥"+val
        }
    }
}
</script>

<style>
.b>img{width: 50px;}
</style>

例子2:

如下:

在OneCom.vue中

<template>
  <div>
    <Two :fuarr="OneArr"/>
    <Two :fuarr="TwoArr"/>
    <Two :fuarr="ThreeArr"/>
</div>
</template>

<script>
import Two from "./TwoCom.vue"
export default {
    components:{
        Two
    },
    computed:{
        OneArr(){
            return this.obj.slice(0,5);
        },
        TwoArr(){
            return this.obj.slice(5,10);
        },
        ThreeArr(){
            return this.obj.slice(10,15);
        }
    },
    data(){
        return{
            obj:[
                {title:"1",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"2",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"3",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"4",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"5",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"6",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"7",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"8",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"9",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"10",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"11",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"12",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"13",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"14",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"15",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"16",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"17",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"18",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"19",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"},
                {title:"20",imgurl:"https://img14.360buyimg.com/mobilecms/s360x360_jfs/t1/100221/9/45007/235763/64fed678F19236f79/1d8c3ed48f5bd8e2.jpg!q70.dpg.webp"}
            ]
        }
    }
}
</script>

<style scoped>

</style>

在TwoCom.vue中

<template>
  <div class="item">
    <Three v-for="(v,i) in fuarr" :key="i" :title="v.title" :img="v.imgurl"/>
  </div>
</template>

<script>
import Three from "./ThreeCom.vue"
export default {
    components:{
        Three
    },
    props:["fuarr"]
}
</script>

<style scoped>
.item{width: 100%;height: 2rem;background-color: pink;display: flex;margin: 0.1rem 0;overflow-x: auto;}
</style>

在ThreeCom.vue中

<template>
  <div>
    <img :src="img">
    <br>
    <span>{{title}}</span>
  </div>
</template>

<script>
export default {
    props:["title","img"]
}
</script>

<style scoped>
img{width: 1.5rem;}
span{font-size: 0.16rem;}
div{text-align: center;
    /* 可以让换行符、空格等不占空 */
    font-size: 0px;   
}
</style>

在App.vue中

<template>
  <div id="app">
    <One />
  </div>
</template>

<script>
import One from './components/no2/OneCom.vue'

export default {
  name: 'App',
  components: {
    One
  }
}
</script>

<style>
*{margin: 0px;padding: 0px;}
html{
    font-size: 26.66667vw;
    /* 此时1rem=100px */
}
</style>
props验证

在接收父组件传递过来的数据时,进行一个验证,验证数据类型,默认值或非空等校验,约束传递过来的数据。

语法:

props:{
    接收参数:{
        type:数据类型 
        //  Number String Boolean Object Array
    }
}

.

 props:{
        num:{
            type:Number
        }
  }  

设置默认值:

props:{
    接收参数:{
        type:数据类型 
            // Number String Boolean Object Array
        defalut:设置的默认值
    }
}

.

  props:{
        num:{
            type:Number,
            default:9527
        }
    }

非空设置:不能和默认值同时使用,required

  props:{
        num:{
            type:Number,
            // default:9527
            required:true
        }
    }
 

2.逆向传值

子组件把数据传递给父组件.

在vue中,逆向传值默认是不被允许的,所以需要使用 $emit() 自定义事件来完成 .

1) $emit() 自定义事件

在子组件中

<template>
  <div>
    zi
    <!-- 逆向传值必须要用事件来触发 -->
    <button @click=fun()>点击传递数据</button>
  </div>
</template>

<script>
export default {
    data(){
        return{
            text:"子组件的数据"
            // text2:"数据2"
        }
    },
    methods:{
        fun(){
            // 2.自定义事件,携带子组件的数据
            // this.$emit("给自定义事件起个名字",传递的数据)
            // this.$emit("haha",this.text)
            this.$emit("haha",{a:this.text})
            // this.$emit("haha",{a:this.text,b:this.text2})

        }
    }

}
</script>

<style>

</style>

在父组件中

<template>
  <div>
    <!-- 逆向传值 -->
    <!-- 3.绑定自定义事件 --> 
    <!-- <Zi @自定义事件="函数"/> 该函数不加() -->
    <Zi @haha="dem"/>
  </div>
</template>

<script>
import Zi from "./ZiDemo.vue"
export default {
    components:{
        Zi
    },
    methods:{
        // 4.定义函数,并接收自定义事件上的数据
        dem(val){
            console.log(val);
        }
    }
}
</script>

<style>

</style>

2)

3.同胞/兄弟传值

什么是同胞组件(多个组件有一个相同的父组件)两个兄弟之间的数据传递

什么是中央事件总线:凌驾在多个兄弟组件之上的一个空vue实例,这个空vue实例就是中央事件总线。

1.创建中央事件总线,在src下创建一个文件夹,里面创建一个xxx.js

​​​​​​

import Vue from "vue"
export default new Vue()

2.要传递的组件,把数据交给中央事件总线 $emit

<template>
  <div>
    <!-- 1.使用事件触发自定义事件 -->
    <button @click="fun()">点我传递数据</button>
  </div>
</template>

<script>
// 2.引用中央事件总线
// 扩展  (1)vue中无论在任何层级,只要路径中出现@,就直接代表src这个文件夹
    //   (2)如果路径上只指定了文件夹,那么程序会自己进入这个文件夹找下面的index.js
    // import from "../../eventBus/index.js"
    // import from "@/eventBus/index.js"
import eventBus from "@/eventBus"
export default {
    data(){
        return{
            texta:"aaaaa"
        }
    },
    methods:{
        fun(){
            // 3.给中央事件总线上绑定自定义事件并传递数据
            // eventBus.$emit("自定义事件名",要传递的数据)
            eventBus.$emit("qqq",{a:this.texta})
        }
    }

}
</script>

<style>

</style>

3.要接收的组件从中央事件总线中拿过来,$on() 监听实例上面的自定义事件

<template>
  <div>
  </div>
</template>

<script>
// 1.引用中央事件总线
import eventBus from "@/eventBus"
export default {
    // 生命周期   在组件创建完毕后自动执行
    created(){
        // 2.使用$on来获取实例上的自定义事件
        // eventBus.$on("要找的那个自定义事件",(val自定义事件上的参数)=>{
        //     逻辑
        // })
        eventBus.$on("qqq",(val)=>{
            console.log(val);
        })
    }

}
</script>

<style>

</style>

如图:

4.跨组件传值

推荐 7 个 Vue.js 插件,也许你的项目用的上(三)
前端达人
03-01 761
使用这7个库 Vue.js 库,加快你的项目开发!当我们可以通过使用库轻松实现相同的结果时,为什么还要编写自定义功能?开发人员最好的朋友和救星就是这些第三方库。我相信一个好的项目会利用一些可用的最佳库。Vue.js创建用户界面的最佳 JavaScript 框架之一。这篇文章是关于 Vue.js 的优秀库系列的三部分,在该系列中,我总是每篇介绍 7 个 Vue.js 相关库,它们将在您的开发之旅...
Vue.js中兄弟组件之间互相传值实例
10-19
本文介绍了Vue.js中兄弟组件之间互相传值的一个实例,通过建立一个中央事件总线(Central Event Bus),也被称为中转站,来实现兄弟组件间的通信。 首先,需要了解的是,在Vue.js中,组件通过声明式的嵌套来构建...
初学Vue.js(2.x版本)
weixin_30659829的博客
08-16 117
首先肯定是打开官网查看文档了,没想到我太高估了自己,看的我头晕也不知道到底说了个啥。没办法,只能另寻他法,好在有菜鸟教程。然而我还是想多了,不稀饭一点点看下去,只想快点明白它到底说了个啥。嗯,找来找去找到了偶能理解的方式了(带着问题学起来轻松些,要不然会被脑的各种疑问烦到啥都干不了)。每个人接收信息以及处理信息的方式都不同吧,找到适合自己的就行。好了,不废话了,进入正文: new ...
vue.js 2.x
qq_53107845的博客
04-12 197
使用vue提供指令(模板语法)开发可以更快捷方便的渲染页面结构 最好在vscoder 里面使用装插件 vetur 引入vue.js文件 <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> 创建vue应用 指定vue应用挂载的入口元素 定义数据源 const vm = new Vue({ //3.指定vue应用挂载的入口元素 el: "#app"; //在id为app的
Vue.js 3.x 优化概览
CherishTheYouth的博客
04-21 1320
本文整理自拉勾网 Vue.js 源码课程导读,讲师是Zoom的前端大佬黄轶,非常感谢! 1. Vue.js框架的演进过程 Vue.js 从 1.x 到 2.0 版本,最大的升级就是引入了虚拟 DOM 的概念。 Vue.js 2.x 的版本痛点问题: 源码自身的维护性; 数据量大后带来的渲染和更新的性能问题; 鸡肋 API; TypeScript 支持不佳; … Vue.js 3.x 带来的优化 源码优化 性能优化 语法Api优化 2. Vue.js 3.0 优化概览 那么接下来,.
Vue.js 3.x (Props验证方式、钩函数、过渡类名)!
有个爱胡思乱想的产品经理!
04-29 873
Vue.js 3.x (Props验证方式、钩函数、过渡类名)!
vue.js 传值方法(父组件传值、非父组件传值
01-08
Vue中,有多种方式实现组件之间的数据传递,主要包括父组件间通信和非父组件间通信。 **一、父组件传值** 1. **父组件组件传递值** - 基本原理:使用`props`属性从父组件组件传递数据。 - 步骤...
vue.js单文件组件中非父组件的传值实例
10-18
总结来说,Vue.js中的非父组件通信可以通过创建一个全局的Vue实例(事件总线)来实现。组件之间通过`$emit`发送事件,其他组件通过`$on`监听并处理这些事件。这种方法提供了一种灵活的方式,使得任何组件都可以...
vue3父组件传值.doc
02-05
本文将详细探讨Vue3中如何使用`setup`语法糖格式来实现父组件数据传递,包括`defineProps`和`defineEmits`这两个关键函数的用法。 ### 1. `defineProps`: 接收父组件传递的数据Vue3中,父组件组件传递...
Vue.js 2.x 教程(2)
anotherQu的博客
07-14 222
组件组件化概念: 注:组件化和模块化是有区别的 组件的基本使用步骤 组件初步接触: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, i
Vue.js 3.x 源码解析先导
zzx5310的博客
10-29 517
前言 2018 年 6 月我在慕课网发布了 Vue.js 2.x 的源码解析课程 《Vue.js 源码全方位深入解析》,同时也开源了课程配套电书。时隔一年多,Vue 官方也开源了 Vue.js 3.x,那么在不久的将来,我也会系统化地做 Vue.js 3.x 的源码分析,同时更新我的这门课程视频以及电书。 Vue.js 3.x 源码刚开源不久,很多人都非常兴奋,我也不例外。我写下这篇文章作为 ...
Vue.js 3.x学习笔记
wangming0123的博客
03-13 239
1.setup() <template> <div class="about"> <h1>This is an about page</h1> <div>{{msg0}}</div> <div id="a" @click="changeMsg">{{ msg }}</div> </div> </template> <script> impor
Vue(2.X)入门使用
weixin_60645637的博客
07-25 319
是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。直接用标签引入 这里我使用的是2.x的版本:https://cn.vuejs.org/js/vue.js先来试试创建第一个Vue应用吧 插值 数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值: Mustache 标签将会被替代为对应数据对象上 msg property 的......
Vue.js3.x新特性和相关知识
m0_57997609的博客
05-06 190
Vue.js的进化历程中,3.x版本是一个更加现代化、更优雅、更灵活和更强大的版本。在本篇博客中,我们介绍了Vue.js3.x的新特性,例如Composition API、静态属性、emit事件等等。然而,Vue.js在其最新的版本Vue.js3.x中提供了许多新特性和改进,使得我们开发更出色的web应用程序。- 更好的响应式系统:Vue.js3.x的响应式系统也得到了改进,不仅增加了更多的API,而且还增加了对Map和Set等JavaScript内置数据结构的支持。
【粉丝福利社】循序渐进Vue.js 3.x前端开发实践
最新发布
时光隧道
09-25 5913
在当今的Web开发领域,Vue.js已经成为不可或缺的一部分,它以轻量级、高性能和易上手著称。对于前端开发者而言,掌握Vue.js不仅是提升技能的需要,更是职业发展的要求。本书正是为了满足这样的需求而编写的。本书以一个拥有近十年前端开发经验的一线“老司机”的视角,以帮助读者掌握企业级开发技能为主旨,既详细介绍了Vue.js的基本概念和应用,又深入探讨了其背后的原理和最佳实践,力求能使读者边学边练,快速且扎实地掌握Vue.js框架的方方面面,并且真正可以使用它开发出商业级别的应用程序。本书内容。
Vue3与Vue2的区别以及Vue3的创建
guoyaqi123456的博客
03-10 222
Vue3快速入门,与vue2的区别
前端(四)——vue.jsvuevue2、vue3
杜永康的博客
07-07 9767
Vue.js是由华裔工程师尤雨溪(Evan You)于2014年创建的开源JavaScript框架。他在Google工作期间,积累了丰富的前端开发经验,并觉得现有的前端框架存在一些不足之处,如复杂性、学习曲线陡峭等。因此,尤雨溪决定开发一个简单、灵活且高效的框架,使开发者能够更轻松地构建用户界面。他的灵感来源于AngularJS和React这两个优秀的前端框架。尤雨溪最初在2013年开始着手构建这个框架的原型,最终于2014年正式发布了Vue.js 1.0版。
Vue.js (包含2.x和3.x) 总结01 (指令、双向绑定、修饰符、事件对象、MVVM)
m0_46732421的博客
09-11 118
指令、双向绑定、修饰符、事件对象、MVVM
Vue2.x和Vue3.x的区别
屈小康
02-14 448
vue2.x和vue3.x的区别
Vue.js组件详解:传值、交互与插槽应用
Vue.js 是一个流行的前端 JavaScript 框架,以其易用性和组件化开发的优势被广泛应用于构建现代 web 应用。本文将深入探讨 Vue.js 中的关键概念,包括组件、父组件组件的通信、兄弟组件间的数据交互以及插槽的...
写文章

热门文章

  • 微信开发者工具的下载及小程序项目创建 1549
  • 安装create-react-app失败以及tar版本的问题 1536
  • node内存泄露耗尽: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript 1499
  • vue 实现动态点击新增 1169
  • Uncaught SyntaxError: Unexpected token ‘export‘ 880

分类专栏

  • 知识点 4篇
  • Vue
  • 错误收集 7篇
  • 备忘记录 1篇

最新评论

  • 谷歌浏览器按F12或右键检查 控制台打开得很慢

    神的力量: 谢谢,真的秒开了,请问是什么原理呢

  • 测试相关问题汇总(二)Linux 基础

    CSDN-Ada助手: CS入门 技能树或许可以帮到你:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml

  • 谷歌浏览器按F12或右键检查 控制台打开得很慢

    唐小橘子: 调完真的秒打开诶表情包

  • 微信开发者工具的下载及小程序项目创建

    问就是做不了: 可以使用vscode来进行代码开发,微信开发者工具来预览展示(充当浏览器的作用)

  • Vue.js (包含2.x和3.x) 总结03 (项目创建 / 启动、组件、组件传值)

    CSDN-Ada助手: 非常感谢您分享这篇关于Vue.js的总结,标题看起来很有吸引力!恭喜您写了第13篇博客,这是一项了不起的成就。您在项目创建、启动以及组件传值方面的总结一定会为其他学习Vue.js的人提供很大的帮助。我期待着您未来更多关于Vue.js的文章,也希望您可以进一步探讨Vue.js的高级特性或者与其他前端框架的比较。谢谢您的分享,继续加油!

最新文章

  • 测试相关问题汇总(二)Linux 基础
  • 测试相关问题汇总(一)mysql 基础
  • Vue.js (包含2.x和3.x) 总结04 (生命周期的钩子函数、路由导航、重定向、多级路由)
2024年2篇
2023年10篇
2022年4篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳坪山网站建设公司卢镇seo网站优化排名哈尔滨网站优化如何南沙企业网站优化推广价格综合医院网站优化策略新站网站优化外包博乐网站优化推广本地网站优化公司排名网站快速排名优化方式收费情况灞桥区网站seo优化排名成都网站的优化贵州标准网站优化价格表西乡综合网站优化网站快速优化挑选云速捷首选金华怎么优化网站网站优化建设方案书网站优化方案上海网站竞价优化代运营雷山网站优化推广价格太原卫浴行业网站优化推广价格百度网站优化渠道郑州网站优化公司报价网站优化的六大步骤新手网站优化方法台州网站优化托管高安网站优化排名刷网站关键词排名优化石家庄网站优化对策如何学习seo网站优化网站优化价格实惠湘潭磐石网络交通设备网站seo优化效果香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化