zoukankan      html  css  js  c++  java
  • Vue 组件 组件嵌套 动态组件 缓存组件 vue-cli脚手架

    vue-day04

    1-组件

    1.1-什么是组件

    组件就是组成页面的常用功能模块的封装(组件就是组成完整页面的零部件)

    1.1.1-组件的组成部分

    1. 视图(html)
    2. 样式(css)
    3. 逻辑(js)

    1.1.2-使用组件的好处

    • 提高开发效率(提高代码的复用率)
    • 提高代码的可维护性

    1.2-全局组件

    • 可以在全局范围内(所有的vue实例)使用

    1.2.2-定义

    Vue.component('myheader',{
        template:`<div>全局组件</div>`
    });
    

    1.2.3-调用

    • 当做自定义标签去调用即可(双标签)

      <myheader></myheader>
      

    1.2.4-组件命名规范

    • 1-全部小写: 定义的地方和调用的地方保持一致即可

      Vue.component('myheader', myHeader);
      
      <myheader></myheader>
      
    • 2-小驼峰: 调用的地方需要将小驼峰改写成-链接的方式

      Vue.component('myHeader', myHeader);
      
      <my-header></my-header>
      
    • 3-大驼峰: 调用的地方需要将大驼峰改写成-链接的方式(第一个单词首字母可改可不改)

      Vue.component('MyHeader', myHeader);
      
      <my-header></my-header>
      <My-header></My-header>
      
      
    
    ### 1.3-私有组件
    
    - 私有只能在当前`vue`实例或组件中使用
    
    #### 1.3.1-定义
    
    ​```js
    new Vue({
        el:'#app',
        // 私有组件(局部组件)
        components:{
            myFooter:{
                template:'<h1>页面底部</h1>',
                data(){
                    return {}
                },
                methods:{
                    
                }
            }
        }
    });
    

    1.3.2-调用

    <my-footer></my-footer>
    

    2-组件嵌套

     // 首页
        const Home={
            template:`
            <div>
                <h1>{{title}}</h1>
                <hr>
                <navbar></navbar>
            </div>
            `,
            data(){
                return {
                    title:'网站首页'
                }
            }
        }
        // 导航条
        const navbar={
            template:`
            <div>
                <h1>{{title}}</h1>
            </div>
            `,
            data(){
                return {
                    title:'导航条'
                }
            }
        }
        // 注册组件
        Vue.component('Home',Home);
        Vue.component('navbar',navbar);
    
        new  Vue({
            el:'#app'
        });
    

    3-动态组件component

    • component: 系统内置的组件

    • 作用: 可以快速实现切换组件的功能

    • is属性: 接收需要展示的组件名称, 一般需要动态设置(v-bind)

    • 用法

      <!-- is:接收需要展示的组件名称 -->
      <component v-bind:is="page"></component>
      

    4-缓存组件keep-alive

    • keep-alive: 系统内置组件

    • 作用: 实现组件缓存(避免重复创建和销毁组件), 从而提升页面性能

    • 用法: 将需要缓存的组件进行包裹

      <keep-alive>
          <home></home>
      </keep-alive>
      

    4.1-特殊的生命周期钩子函数

    • activated,deactivated只在keep-alive包裹的组件中生效, 普通组件中没有这两个生命周期钩子函数

    • activated: 在激活组件中触发

    • deactivated: 在失活组件中触发


    5-vue-cli脚手架

    • cli: command line interface(命令行接口)
    • 基于node平台的

    5.1-安装

    npm install vue-cli -g
    // 或者
    // 安装cnpm
    npm install cnpm -g
    // 使用cnpm安装vue-cli脚手架
    cnpm install vue-cli -g
    

    5.2-检查是否安装成功

    • 在命令行下运行如下命令, 如果能够看到一个版本号, 说明安装成功
    // 2.9.6
    vue -V
    

    5.3-初始化项目

    vue init webpack 项目名称
    

    5.5-启动开发服务器

    • 开发服务器默认监听端口: 8080
    • 开发服务器访问地址: http://localhost:8080
    npm run dev
    // 或者
    npm run start
    npm start
    

    5.6-项目目录结构介绍

    5.7-vscode辅助插值

    • Vetur:
      • 高亮显示.vue文件的代码
      • 并且会提供语法辅助功能

    5.8-禁用eslint语法校验功能

    1. 打开配置文件build/webpack.base.conf.js, 注入如下配置节点

        module: {
          rules: [
            // 禁用eslint语法校验功能; 大概在43行左右
            // ...(config.dev.useEslint ? [createLintingRule()] : []),
      
    2. 重启开发服务器

      npm run dev
      

    6-后台管理系统页面结构搭建

    • 布局组件核心代码

      /pages/Layout.vue

      <template>
        <div class="container">
          <div class="left">
            <ul class="navbar">
              <li :class="page==='Main'?'active':''" @click="changePage('Main')">管理中心</li>
              <li :class="page==='Goods'?'active':''" @click="changePage('Goods')">商品管理</li>
              <li :class="page==='User'?'active':''" @click="changePage('User')">会员管理</li>
              <li :class="page==='Order'?'active':''" @click="changePage('Order')">订单管理</li>
            </ul>
          </div>
          <div class="right">
            <!-- 头部 -->
            <Header></Header>
            <div class="content">
              <component :is="page"></component>
            </div>
            <!-- 底部 -->
            <Footer />
          </div>
        </div>
      </template>
      
      <script>
      // 1-导入页组件
      import Main from "./Main";
      import Goods from "./Goods";
      import Order from "./Order";
      import User from "./User";
      // 导入功能组件
      import Header from "../components/Header";
      import Footer from "../components/Footer";
      
      export default {
        // 2-注册组件
        components: {
          Main,
          Goods,
          Order,
          User,
          Header,
          Footer
        },
        data() {
          return {
            // 页面组件名称
            page: "Order"
          };
        },
        methods: {
          // 切换页面
          changePage(page) {
            this.page = page;
          }
        }
      };
      </script>
      
      <style>
      .container {
        background-color: #ddd;
        /* vh:相对单位; 100vh=屏幕的高度  1vh==1/100屏幕高度; viewport height */
        height: 100vh;
        display: flex;
      }
      /* 左侧导航栏 */
      .container .left {
         226px;
        background: #00152a;
      }
      .left .navbar li {
        list-style: none;
        line-height: 50px;
        color: #fff;
        text-align: center;
        cursor: pointer;
      }
      .left .navbar li:hover {
        background: #0077b8;
      }
      .left .navbar li.active {
        background: #0077b8;
      }
      /* 右侧主体区域 */ 
      .container .right {
        flex: 1;
        display: flex;
        flex-direction: column;
      }
      .right .header {
        height: 60px;
        line-height: 60px;
        text-align: center;
        background: #fff;
      }
      .right .content {
        margin: 10px;
        background: #fff;
        height: 300px;
        text-align: center;
        flex: 1;
      }
      .right .footer {
        line-height: 60px;
        text-align: center;
        background: #fff;
      }
      </style>
      
  • 相关阅读:
    C语言博客作业06--结构体&文件
    C语言博客05--指针
    C语言博客作业04--数组
    LeetCode错题集
    C博客作业--指针
    深入浅出强化学习:原理入门(待更新)
    Detectron2环境配置+Ubantu+CUDA10.1+pytorch1.7.0
    论文记载:A Survey on Traffic Signal Control Methods
    论文记载:FRAP:Learning Phase Competition for Traffic Signal Control
    周博磊老师强化学习纲领笔记第三课:无模型的价值函数估计和控制
  • 原文地址:https://www.cnblogs.com/bnzw/p/14008122.html
Copyright © 2011-2022 走看看