Vue-组件嵌套、组件CSS样式、多组件嵌套、组件传值、传值和传引用、多个单文件组件路由的使用

一、组件嵌套

App.vue是父组件,components下面的是子组件

组件嵌套包括,全局组件和局部组件

一般使用的是局部组件,使用方式是,

1、引用组件

2、注册组件

3、使用组件

新建一个Users.vue 子组件,

<template>
  <div class="Users">
    <ul>
      <li v-for="(user, index) in users" :key="index">{
  
  { user }}</li>
    </ul>
  </div>
</template>

<script>
export default {
data() {
return {
users: ["测试1", "测试2", "测试3"],
};
},
};
</script>

<style>
</style>

引入这个子组件,在App.vue里的<script>里引入组件

注册组件,就是在components里 写入这个组件的名字,

最后是使用组件,在唯一的<div>标签里使用这个组件

<template>
  <!-- 包括html -->
  <div id="app">
    <!-- 3、使用组件 -->
    <User />
  </div>
</template>

<script>
// js部分,逻辑部分
//import HelloWorld from "./components/HelloWorld.vue";
//1、引入组件
import User from "./components/Users.vue";

export default {
name: "App",
components: {
// 2、注册组件
User,
},
};
</script>

<style>
/* css部分 */
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>

二、组件CSS样式

组件css样式,App.vue里的样式是全局的样式,如果想在子组件中只针对子组件生效css,需要加scoped域。

<style scoped>
/* css部分 */
h1 {
  color: blue;
}
</style>

三、多组件嵌套

新建一个Header.vue ,Footer.vue子组件,然后还是使用之前的方式,在App.vue里引入组件,然后注册组件,最后使用组件这样一个顺序。

<template>
  <div class="Header">
    <h1>{
  
  { title }}</h1>
  </div>
</template>

<script>
export default {
data() {
return {
title: "我是title",
};
},
};
</script>

<style scoped>
.Header {
background: lightgreen;
padding: 10px;
}
h1 {
color: #222;
text-align: center;
}
</style>

<template>
  <div class="Footer">
    <p>{
  
  { copyright }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      copyright: "Copyright 2022 Vue Demo",
    };
  },
};
</script>

<style scoped>
.Footer {
  background: #222;
  padding: 6px;
}
p {
  color: lightgreen;
  text-align: center;
}
</style>
<template>
  <!-- 包括html -->
  <div id="app">
    <!-- 3、使用组件 -->
    <Header />
    <User v-bind:usersname="users" />
    <Footer />
  </div>
</template>

<script>
// js部分,逻辑部分
//import HelloWorld from "./components/HelloWorld.vue";
//1、引入组件
import User from "./components/Users.vue";
import Header from "./components/Header.vue";
import Footer from "./components/Footer.vue";

export default {
  name: "App",
  data() {
    return {
      users: [
        { usename: "test1", wechat: "1234567", show: false },
        { usename: "test2", wechat: "1234567", show: false },
        { usename: "test3", wechat: "1234567", show: false },
        { usename: "test4", wechat: "1234567", show: false },
      ],
    };
  },
  components: {
//2、注册组件
    User,
    Header,
    Footer,
  },
};
</script>

<style scoped>
/* css部分 */
</style>

四、组件传值

组件传值就是把父组件的值传递给子组件,所以父组件必须有值,左侧是自定义的名称,右侧是实际的值使用v-bind: 绑定的就是data里面的值。
App.vue里data里面的值是父组件的值,然后在使用组件的地方,使用绑定方式,左侧是自定义的名字,右侧是我们data里面的数据,如果不用v-bind,那么就是一个字符串。绑定后,在Users.vue里接收,使用的是自定义那个名字接收,在<script>标签里 新增props:{} 来接收传过来的属性值,可以使用新增一个方法打印这个传过来的值,进行验证。

App.vue

<template>
  <!-- 包括html -->
  <div id="app">
    <Header />
    <User v-bind:usersname="users" />
    <Footer />
  </div>
</template>

<script>
// js部分,逻辑部分
//import HelloWorld from "./components/HelloWorld.vue";
//1、引入组件
import User from "./components/Users.vue";
import Header from "./components/Header.vue";
import Footer from "./components/Footer.vue";

export default {
name: "App",
data() {
return {
users: [
{ usename: "test1", wechat: "1234567", show: false },
{ usename: "test2", wechat: "1234567", show: false },
{ usename: "test3", wechat: "1234567", show: false },
{ usename: "test4", wechat: "1234567", show: false },
],
};
},
components: {
User,
Header,
Footer,
},
};
</script>

<style scoped>
/* css部分 */
</style>

Users.vue

<template>
  <div class="Users">
    <p>{
  
  { usersname }}</p>
    <ul>
      <li
        @click="user.show = !user.show"
        v-for="(user, index) in usersname"
        :key="index"
      >
        <h2>{
  
  { user.usename }}</h2>
        <h3 v-show="user.show">{
  
  { user.wechat }}</h3>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
// props: ["usersname"],
props: {
usersname: {
type: Array,
},
},
data() {
return {};
},
methods: {
test() {
console.log(this.users);
},
},
};
</script>

<style scoped>
h1 {
color: green;
}
</style>

五、传值和传引用

属性传值包括两种情况:1、传值(String 类型、number类型、boolean类型) 和2、传引用(对象类型、数组类型)。传引用会影响多个使用它的地方,传值只会影响自身的值。

六、多组件页面路由的使用

1、先定义路由文件,在router目录下index.js中,在路由文件中导入路由模块,

import Router from 'vue-router',然后把所有路由匹配规则通过routes属性指定

routes[
         {
           path: '/testcases_edit/:id',
           component: resolve => require(['../components/page/TestcaseEdit.vue'], resolve),
           meta: { title: '用例编辑' },
           name: 'testcases_edit'
           },

]

路径path,component是指定的调用哪个单文件组件

2、路由文件写完之后,需要加入到main.js当中。import router from './router',然后把router文件导入到Vue对象当中

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

3、在组件中如何使用路由,需要在App.vue文件中,这个标签进行使用 <router-view></router-view>

<template>
    <div id="app">
        <router-view></router-view>
    </div>
</template>
<style>
    @import "./assets/css/main.css";
    @import "./assets/css/color-dark.css";     /*深色主题*/
</style>

index.html -> main.js-> App.vue->router下面的路由index.js->找到各个单文件组件,

  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值