Blogger Information
Blog 77
fans 0
comment 0
visits 55566
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Vue3组件的传值、插槽,Vue3新路由和子路由配置和使用
Jet的博客
Original
1887 people have browsed it

一、Vue3组件的传值

1、传值

  • App.vue文件
  1. <template>
  2. <div>欧阳克</div>
  3. <OyDiv style="color:red;" size="2" type="wrning">欧阳组件</OyDiv>
  4. <Ztp></Ztp>
  5. </template>
  6. <script>
  7. import OyDiv from "./components/OyDiv.vue";
  8. export default{
  9. // data:数据; methods:js计算属性等;
  10. // components:组件; 使用组件,传值
  11. components:{
  12. OyDiv
  13. },
  14. }
  • OyDiv.vue组件文件(组件文件)
  1. <template>
  2. <div>{{ size }}</div>
  3. <div>{{ type }}</div>
  4. </template>
  5. <script>
  6. export default({
  7. // 1.组件里面的api都是和页面文件一样的
  8. // props:配置项,是接收传值的
  9. // props:接收的值,直接跟data里的数据一样使用
  10. props: ['size', 'type']
  11. })
  12. </script>


2、可以多个组件

  • App.vue文件
  1. <template>
  2. <div>欧阳克</div>
  3. <!--
  4. <oy-div style="color:red;" size="2">欧阳组件</oy-div>
  5. <OyDiv style="color:red;" size="2">欧阳组件</OyDiv>
  6. -->
  7. <OyDiv style="color:red;" size="2" type="wrning">欧阳组件</OyDiv>
  8. <Ztp></Ztp>
  9. </template>
  • Ztp.vue文件(组件文件)
  1. <template>
  2. <div>朱天蓬组件</div>
  3. </template>


3、组件引入多个子组件

  • App.vue组件文件
  1. <template>
  2. <div>欧阳克</div>
  3. <OyDiv style="color:red;" size="2" type="wrning">欧阳组件</OyDiv>
  4. </template>
  5. <script>
  6. import OyDiv from "./components/OyDiv.vue";
  7. export default{
  8. // data:数据; methods:js计算属性等;
  9. // components:组件; 使用组件,传值
  10. components:{
  11. OyDiv
  12. },
  13. }
  • Ztp.vue子组件
  1. <template>
  2. <div>{{ size }}</div>
  3. <div>{{ type }}</div>
  4. <Ztp></Ztp>
  5. </template>
  6. <script>
  7. import Ztp from "./Ztp.vue";
  8. export default({
  9. // 1.组件里面的api都是和页面文件一样的
  10. // props:配置项,是接收传值的
  11. // props:接收的值,直接跟data里的数据一样使用
  12. props: ['size', 'type'],
  13. components: {
  14. Ztp
  15. }
  16. })
  17. </script>


4、传值的配置项

  • app.vue文件
  1. <template>
  2. <div>欧阳克</div>
  3. <OyDiv style="color:red;" :arr="arr_v" types="wrning">欧阳组件</OyDiv>
  4. </template>
  5. <script>
  6. import OyDiv from "./components/OyDiv.vue";
  7. export default{
  8. // data:数据; methods:js计算属性等;
  9. // components:组件; 使用组件,传值
  10. components:{
  11. OyDiv
  12. },
  13. data(){
  14. return {
  15. arr_v:[
  16. "欧阳克",
  17. "朱天蓬"
  18. ],
  19. }
  20. },
  21. }
  • OyDiv.vue文件
  1. <template>
  2. <div>{{ size }}</div>
  3. <div>{{ types }}</div>
  4. <div>{{ arr }}</div>
  5. <Ztp></Ztp>
  6. </template>
  7. <script>
  8. import Ztp from "./Ztp.vue";
  9. export default({
  10. // 1.组件里面的api都是和页面文件一样的
  11. // props:配置项,是接收传值的
  12. // props:接收的值,直接跟data里的数据一样使用
  13. props: {
  14. size: {
  15. type : Number,
  16. required: true,
  17. default: 0
  18. },
  19. types: {
  20. type : String
  21. },
  22. arr : {
  23. type : Array
  24. }
  25. },
  26. components: {
  27. Ztp
  28. }
  29. })
  30. </script>


5、判断值赋予样式

  • OyButton.vue文件
  1. <template>
  2. {{ size }}
  3. {{ type }}
  4. <button v-if="type==''" class="bottom">按钮</button>
  5. <button v-else-if="type=='primary'" class="bottom oy-button--primary">按钮</button>
  6. </template>
  7. <script>
  8. export default({
  9. props: {
  10. size: {
  11. },
  12. type: {
  13. },
  14. },
  15. })
  16. </script>
  17. <style scoped>
  18. button { xxx }
  19. .oy-button--primary { xxx }
  20. <style>

  • App.vue文件
  1. <template>
  2. <div>欧阳克</div>
  3. <!--<OyDiv style="color:red;" :arr="arr_v" types="wrning">欧阳组件</OyDiv>-->
  4. <OyButton size="large" type=""></OyButton>
  5. </template>
  6. <script>
  7. import OyDiv from "./components/OyDiv.vue";
  8. import OyButton from "./components/OyButton.vue";
  9. export default{
  10. // data:数据; methods:js计算属性等;
  11. // components:组件; 使用组件,传值
  12. components:{
  13. OyDiv,
  14. OyButton
  15. },
  16. }
  17. </script>


  1. <OyButton size="large" type="primary"></OyButton>


@style scoped

  • scoped:可以穿透到其他文件使用,或者本文件单独使用

6、插槽的使用方式:

  • 单个插槽

  • App.vue文件

    1. <template>
    2. <div>欧阳克</div>
    3. <!--插槽-->
    4. <OyButton size="large" type="primary">提交</OyButton>
    5. </template>
  • OnButton.vue文件

  1. <template>
  2. {{ size }}
  3. {{ type }}
  4. <button class="bottom">
  5. <!-- 添加一个插槽 -->
  6. <!-- 插槽可以在组件的任意位置 -->
  7. <slot></slot>
  8. </button>
  9. <button v-if="type==''" class="bottom">按钮</button>
  10. <button v-else-if="type=='primary'" class="bottom oy-button--primary">按钮</button>
  11. </template>


  • 多个插槽

  • App.vue文件

  1. <!--插槽-->
  2. <OyButton size="large" type="primary">
  3. 提交
  4. <span style="color:red">确定</span>
  5. <!-- 用标签来使用有名字的插槽 -->
  6. <template v-slot:one>
  7. <div style="color:greenyellow">确定</div>
  8. </template>
  9. <!-- 语法糖 # -->
  10. <template #two>
  11. <div style="color:blue">确定</div>
  12. </template>
  13. </OyButton>
  • OnButton.vue文件
  1. <template>
  2. {{ size }}
  3. {{ type }}
  4. <button class="bottom">
  5. <!-- 添加一个插槽 -->
  6. <!-- 插槽可以在组件的任意位置 -->
  7. <slot></slot>
  8. </button>
  9. <slot name="one"></slot>
  10. <slot name="two"></slot>
  11. <button v-if="type==''" class="bottom">按钮</button>
  12. <button v-else-if="type=='primary'" class="bottom oy-button--primary">按钮</button>
  13. </template>


7、子组件调用父组件方法

  • App.vue文件
  1. <template>
  2. <OyJs></OyJs>
  3. </template>
  4. <script>
  5. import OyJs from "./components/OyJs.vue";
  6. export default{
  7. components:{
  8. OyJs
  9. },
  10. data(){
  11. return {
  12. }
  13. },
  14. methods : {
  15. fun(e){
  16. console.log('父组件方法');
  17. console.log(e);
  18. }
  19. },
  20. }
  21. </script>
  • OyJs.vue文件
  1. <template>
  2. <div>OyJs</div>
  3. <div>{{ OyJs_fun() }}</div>
  4. <button @click="OyJs_fun(1)">按钮</button>
  5. </template>
  6. <script>
  7. export default({
  8. props: {
  9. },
  10. methods: {
  11. OyJs_fun(e){
  12. console.log('OyJs方法');
  13. // 使用全局属性
  14. // $parent 上一级,父级方法
  15. this.$parent.fun(e);
  16. // 最顶层,根目录
  17. this.$root.fun(e);
  18. }
  19. }
  20. })
  21. </script>


this.$parent.fun: $parent 上一级,父级方法
this.$root.fun: $root 最顶层,根目录


8、组件生命周期

声明周期 作用
beforeCreate 在创建组件之前调用
created 组件创建完成调用
beforeMount 模板挂载之前调用
mounted 模板挂载完成调用
beforeUpdate 改变内容之前调用
update 改变内容之后调用
beforeUnmout 组件销毁之前调用
unmounted 组件销毁之后调用

二、Vue3路由

  • 路由文件路径:src/router/index.js

  • 视图文件路径:src/view/XxXxx.vue

1、新增路由:

  • 1.1 创建视图文件:
  • 1.2 新建路由:
  1. import MyView from '../views/MyView.vue'
  2. routes: [
  3. {
  4. path: '/my',
  5. name: 'my',
  6. component: MyView
  7. },
  8. ]


2、单页面跳转

  1. <router-link to = "/">首页</router-link> |
  2. <router-link to ="/about">帮助页面</router-link> |
  3. <router-link to = "/my">个人中心</router-link>

在页面内刷新跳转新页面,不用怎个页面刷新


3、另外一个router跳转方法

  • app.vue文件
  1. <el-button @click="go_url()">跳转</el-button>
  1. <script>
  2. methods : {
  3. },
  4. go_url(){
  5. // 路由有个全局变量
  6. // 用选项api,都是this. 可以访问全局变量
  7. // this.$route 获取页面信息
  8. this.$router.push('/my');
  9. }
  10. },
  11. }
  12. </script>

路由跳转不支持跳转至外网,如需要可用a标签
this.$router.push:是跳转到新页面
this.$route:是获取页面信息


自行配置跳转参数

  1. go_url(){
  2. // 路由有个全局变量
  3. // 用选项api,都是this. 可以访问全局变量
  4. // this.$route 获取页面信息
  5. //this.$router.push('/my');
  6. console.log(this.$route);
  7. // 用js跳转,增加传值
  8. this.$router.push({
  9. path : '/my',
  10. query : {
  11. id:188,
  12. oid:288
  13. }
  14. });


4、子路由

  • 4.1 创建视图文件:
  • 4.2 新建路由:

  • 修改路由文件 index.js

子路由的path,不能在前面加反斜杠/

  1. import MyOrderView from '../views/MyOrderView.vue'
  2. import MyConfigView from '../views/MyConfigView.vue'
  3. const router = createRouter({
  4. history: createWebHistory(import.meta.env.BASE_URL),
  5. routes: [
  6. {
  7. path: '/my',
  8. name: 'my',
  9. component: MyView,
  10. // 子路由的path,不能在前面加反斜杠/
  11. children: [
  12. {
  13. path: 'order',
  14. name: 'my_order',
  15. component: MyOrderView,
  16. },
  17. {
  18. path: 'config',
  19. name: 'my_config',
  20. component: MyConfigView
  21. },
  22. ]
  23. },
  24. ]
  25. })
  • 修改附近视图文件 MyView.vue
  1. <template>
  2. <div>
  3. <h1>这是个人中心页面</h1>
  4. <router-link to="/my/order">订单页面</router-link> |
  5. <router-link to="/my/config">配置页面</router-link>
  6. <router-view></router-view>
  7. </div>
  8. </template>
  • 增加子路由文件:MyConfigView.vue、MyOrderView.vue
  1. <template>
  2. <div><h1>这是个人中心配置页面</h1></div>
  3. </template>
  1. <template>
  2. <div><h1>这是个人中心订单页面</h1></div>
  3. </template>

Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post