zoukankan      html  css  js  c++  java
  • vue框架

    1.vue项目环境搭建

    2.pycharm配置vue项目

    3.vue项目结构分析

    4.vue组件分析

    5.项目入口

    6.项目运行生命周期分析

    7.配置全局样式

    8.nav导航栏封装

    9.新增页面三步骤

    10.组件生命周期钩子

    11.页面跳转综合案例

    一.vue项目环境搭建

    """
    node ~~ python:node是用c++编写用来运行js代码的
    npm(cnpm) ~~ pip:npm是一个终端应用商城,可以换国内源cnpm
    vue ~~ django:vue是用来搭建vue前端项目的
    
    1) 安装node
    官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/
    
    2) 换源安装cnpm
    >: npm install -g cnpm --registry=https://registry.npm.taobao.org
    
    3) 安装vue项目脚手架
    >: cnpm install -g @vue/cli

     4)安装好了以后可以查看

     vue

     vue -v
     vue -- version

    注:2或3终端安装失败时,可以清空 npm缓存 再重复执行失败的步骤
    npm cache clean --force
    """

    二. vue项目创建 和 pycharm配置vue项目

    vue项目创建

    1) 进入存放项目的目录
    >: cd *** 切换到D盘下
    
    2) 创建项目
    >: vue create 项目名
    
    3) 项目初始化

     pycharm配置vue项目

    1) 用pycharm打开vue项目
    2) 添加配置npm启动

     

     

    三.vue项目结构分析

    ├── v-proj
    |    ├── node_modules      // 当前项目所有依赖,一般不可以移植给其他电脑环境
    |    ├── public            
    |    |    ├── favicon.ico    // 标签图标
    |    |    └── index.html    // 当前项目唯一的页面
    |    ├── src
    |    |    ├── assets        // 静态资源img、css、js
    |    |    ├── components    // 小组件
    |    |    ├── views        // 页面组件
    |    |    ├── App.vue        // 根组件
    |    |    ├── main.js        // 全局脚本文件(项目的入口)
    |    |    ├── router.js    // 路由脚本文件(配置路由 url链接 与 页面组件的映射关系)
    |    |    └── store.js    // 仓库脚本文件(vuex插件的配置文件,数据仓库)
    |    ├── README.md
    └    └── **配置文件

    四.vue组件分析

    补充:如果想在About页面也显示样式

     vue组件

    # 1) template:有且只有一个根标签
    # 2) script:必须将组件对象导出 export default {}
    # 3) style: style标签明确scoped属性,代表该样式只在组件内部起作用(样式的组件化)
     1 <template>
     2     <!--只能有一个根标签-->
     3     <div class="test">
     4 
     5     </div>
     6 </template>
     7 
     8 <script>
     9     // 将组件对象导出用export default
    10     export default {
    11         // 名字是无所谓的
    12         name: "Test"
    13     }
    14 </script>
    15 
    16 <style scoped>
    17 
    18 </style>
    代码

    组件与页面组件如何实现交互的小案例:
    components文件夹

    Test:

     1 <template>
     2     <!--只能有一个根标签-->
     3     <div class="test">
     4         <p>tttt</p>
     5     </div>
     6 </template>
     7 
     8 <script>
     9     // 将组件对象导出用export default
    10     export default {
    11         // 名字是无所谓的
    12         name: "Test"
    13     }
    14 </script>
    15 <!-- 你如果把scoped去掉了,就是全局起作用如果有相同的,取最后一个-->
    16 <style scoped>
    17     p{
    18         color: red;
    19     }
    20 </style>
    代码

    Test2:

     1 <template>
     2     <!--只能有一个根标签-->
     3     <div class="test2">
     4         <p>ttttt2222</p>
     5     </div>
     6 </template>
     7 
     8 <script>
     9     // 将组件对象导出用export default
    10     export default {
    11         // 名字是无所谓的
    12         name: "Test2"
    13     }
    14 </script>
    15 
    16 <style scoped>
    17     p{
    18         color:orange;
    19     }
    20 </style>
    代码

    views:文件夹

    Home:

     1 <template>
     2   <div class="home">
     3     <T></T>
     4     <T2></T2>
     5   </div>
     6 </template>
     7 
     8 <script>
     9   // 导入 @ 符代表src
    10   import T from '@/components/Test'
    11   import T2 from '@/components/Test2'
    12 
    13   //导入 注册一下
    14   export default {
    15       components:{
    16           T,
    17           T2,
    18       }
    19   }
    20 
    21 </script>
    View Code

    五.项目入口

    全局脚本文件main.js

    import Vue from 'vue' // 导入了vue环境
    import App from './App.vue' // 相对路径  导包
    import router from './router'
    import store from './store'
    // 注意同一级目录下导入的名字不要相同,因为它省略了后缀
    
    Vue.config.productionTip = false // 提示信息
    
    new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount('#app')

    也可以改写为:

    import Vue from 'vue'  // 加载vue环境
    import App from './App.vue'  // 加载根组件
    import router from './router'  // 加载路由环境
    import store from './store'  // 加载数据仓库环境
    
    Vue.config.productionTip = false
    new Vue({
        el: '#app',
        router,
        store,
        render: function (readFn) {
            return readFn(App);
        },
    });

    六.项目运行生命周期分析(重点)

    1) 加载mian.js启动项目
        i) import Vue from 'vue' 为项目加载vue环境
        ii) import App from './App.vue' 加载根组件用于渲染替换挂载点
        iii) import router from './router' 加载路由脚本文件,进入路由相关配置
        
    2) 加载router.js文件,为项目提供路由服务,并加载已配置的路由(链接与页面组件的映射关系)
        注:不管当前渲染的是什么路由,页面渲染的一定是根组件,链接匹配到的页面组件只是替换根组件中的
        <router-view></router-view>
        
    3) 如果请求链接改变(路由改变),就会匹配新链接对应的页面组件,新页面组件会替换渲染router-view标签,
    替换掉之前的页面标签(就是完成了页面跳转)

    代码:

    App.vue 根组件:

     1 <!--App.vue是一个根组件 在所有的大项目中根组件就这5句话-->
     2 <template>
     3   <div id="app">
     4      <!-- url路径会加载不同的页面组件
     5             eg:/red => RegPage  | /blue => BluePage
     6          来替换router-view标签,完成页面的切换
     7          -->
     8   <router-view></router-view>
     9 
    10   </div>
    11 </template>
    View Code

    view.vue 页面组件:

    BluePage.vue:

     1 <template>
     2     <div class="blue-page"></div>
     3 </template>
     4 
     5 <script>
     6     export default {
     7         name: "BluePage"
     8     }
     9 </script>
    10 
    11 <style scoped>
    12     .blue-page{
    13         /*一个屏幕的宽度一个屏幕的高度*/
    14          100vw;
    15         height: 100vh;
    16         background-color: blue;
    17 
    18     }
    19 </style>
    代码

    RedPage.vue:

     1 <template>
     2     <div class="red-page"></div>
     3 </template>
     4 
     5 <script>
     6     export default {
     7         name: "RedPage"
     8     }
     9 </script>
    10 
    11 <style scoped>
    12     .red-page{
    13         /*一个屏幕的宽度一个屏幕的高度*/
    14          100vw;
    15         height: 100vh;
    16         background-color: red;
    17 
    18     }
    19 </style>
    代码

    还需要在路由中配置:router.js

     1 import Vue from 'vue'
     2 import Router from 'vue-router'
     3 import Home from './views/Home.vue'
     4 import RedPage from './views/RedPage.vue'
     5 import BluePage from './views/BluePage.vue'
     6 
     7 Vue.use(Router);
     8 
     9 export default new Router({
    10   mode: 'history', // 就是历史记录的意思,注释掉的话会用#号模拟
    11   base: process.env.BASE_URL,
    12   routes: [
    13     {
    14       path: '/',
    15       name: 'home',
    16       component: Home
    17     },
    18     {
    19       path: '/red',
    20       name: 'red',
    21       component: RedPage
    22     },
    23        {
    24       path: '/blue',
    25       name: 'blue',
    26       component: BluePage
    27     },
    28 
    29 
    30   ]
    31 })
    代码

    七.配置全局样式

    assets/css/global.css
    html, body, h1, h2, ul, p {
       margin: 0;
       padding: 0;
    }
    ul {
       list-style: none;
    }
    a {
       color: black;
       text-decoration: none;
    }

    main.js中新增

    // 配置全局样式
    import '@/assets/css/global.css'

     

    有2个步骤:

     

    八.nav导航栏封装

    components/Nav.vue 小组件
     1 <template>
     2     <div class="nav">
     3         <!--还需要在小组件中完成一些布局-->
     4         <ul>
     5             <!--如何实现点谁就实现跳转到谁的页面
     6             但是用a标签的话有bug他不是单页面刷新(就是重新加载了一次项目界面)
     7             采用vue-router完成页面跳转-->
     8             <li>
     9                 <!--<a href="/">主页</a>-->
    10                 <router-link to="/">主页</router-link>
    11             </li>
    12             <li>
    13                 <!--<a href="/red">红页</a>-->
    14                 <router-link to="/red">红页</router-link>
    15             </li>
    16             <li>
    17                 <!--<a href="/blue">蓝页</a>-->
    18                 <router-link to="/blue">蓝页</router-link>
    19             </li>
    20         </ul>
    21     </div>
    22 </template>
    23 
    24 <script>
    25     export default {
    26         name: "Nav"
    27     }
    28 </script>
    29 
    30 <style scoped>
    31 /*样式布局*/
    32     .nav{
    33          100%;
    34         height: 60px;
    35         background-color: orange;
    36     }
    37     /*并排排起来*/
    38     .nav li{
    39         float: left;
    40         /*字体 字重 大小  行高  字族*/
    41         font: normal 20px/60px '微软雅黑';
    42         padding: 0 30px;
    43     }
    44 
    45     .nav li:hover{
    46         cursor: pointer;
    47         background-color: aquamarine;
    48     }
    49 
    50     .nav li.active{
    51         cursor: pointer;
    52         background-color: aquamarine;
    53     }
    54 
    55 </style>
    代码

    小组件创建好了,需要在每个页面组件里面添加一下:

    views/HomePage.vue:RedPage.vue与BluePage都是添加下方三个步骤代码,都是一样的步骤
     1 <template>
     2     <div class="home">
     3         <!-- 3)使用Nav组件 -->
     4         <Nav></Nav>
     5     </div>
     6 </template>
     7 
     8 <script>
     9     // 1)导入Nav组件
    10     import Nav from '@/components/Nav'
    11     export default {
    12         // 2)注册Nav组件
    13         components: {
    14             Nav,
    15         }
    16     }
    17 </script>
    View Code

    九.新增页面三步骤

    1) 在views文件夹中创建视图组件
    2) 在router.js文件中配置路由
    3) 设置路由跳转,在指定路由下渲染该页面组件(替换根组件中的router-view标签)
    views/TanPage.vue: 页面组件
     1 <template>
     2     <div class="tan-page">
     3         <Nav></Nav>
     4     </div>
     5 </template>
     6 
     7 <script>
     8     import Nav from '@/components/Nav'
     9     export default {
    10         name: "TanPage",
    11         components: {
    12             Nav
    13         }
    14     }
    15 </script>
    16 
    17 <style scoped>
    18     .tan-page {
    19          100vw;
    20         height: 100vh;
    21         background-color: tan;
    22     }
    23 </style>
    View Code
    router.js  路由
     1 // ...
     2 import TanPage from "./views/TanPage";
     3 export default new Router({
     4     mode: 'history',
     5     base: process.env.BASE_URL,
     6     routes: [
     7         // ...
     8         {
     9             path: '/tan',
    10             name: 'tan',
    11             component: TanPage
    12         }
    13     ]
    14 })
    View Code
    components/Nav.vue  小组件
    1 <li>
    2     <router-link to="/tan">土页</router-link>
    3 </li>
    View Code

    十.组件生命周期钩子

    # 1)一个组件从创建到销毁的整个过程,就称之为组件的生命周期
    # 2)在组件创建到销毁的过程中,会出现众多关键的时间节点,如 组件要创建了、
      组件创建完毕了、组件数据渲染完毕了、组件要被销毁了、组件销毁完毕了 等等时间节点,
      每一个时间节点,vue都为其提供了一个回调函数(在该组件到达该时间节点时,
      就会触发对应的回调函数,在函数中就可以完成该节点需要完成的业务逻辑) # 3)生命周期钩子函数就是 vue实例 成员

    注意:
    任何一个组件:在vue组件的script的export default导出字典中直接写钩子函数

    代码:

     1 export default {
     2     // ...
     3     beforeCreate() {
     4         console.log('组件创建了,但数据和方法还未提供');
     5         // console.log(this.$data);
     6         // console.log(this.$options.methods);
     7         console.log(this.title);
     8         console.log(this.alterTitle);
     9     },
    10     // 该钩子需要掌握,一般该组件请求后台的数据,都是在该钩子中完成
    11     // 1)请求来的数据可以给页面变量进行赋值
    12     // 2)该节点还只停留在虚拟DOM范畴,如果数据还需要做二次修改再渲染到页面,
    13     //  可以在beforeMount、mounted钩子中添加逻辑处理
    14     created() {
    15         console.log('组件创建了,数据和方法已提供');
    16         // console.log(this.$data);
    17         // console.log(this.$options.methods);
    18         console.log(this.title);
    19         console.log(this.alterTitle);
    20         console.log(this.$options.name);
    21     },
    22     destroyed() {
    23         console.log('组件销毁完毕')
    24     }
    25 }
    View Code

    十一.根据请求路径高亮路由标签案例

    1) router-link会被解析为a标签,用to完成指定路径跳转,但是不能添加系统事件(因为是组件标签)
    2) 在js方法中可以用 this.$router.push('路径') 完成逻辑跳转
    3) 在js方法中可以用 this.$route.path 拿到当前请求的页面路由
    components/Nav.vue

    代码:

     1 <template>
     2     <div class="nav">
     3         <!--采用vue-router完成页面跳转,不能采用a标签(会发生页面刷新,本质就是重新加载了一次项目界面)-->
     4         <ul>
     5             <li @click="changePage('/')" :class="{active: currentPage === '/'}">
     6                 <!--<a href="/">主页</a>-->
     7                 <!--<router-link to="/">主页</router-link>-->
     8                 主页
     9             </li>
    10             <li @click="changePage('/red')" :class="{active: currentPage === '/red'}">
    11                 <!--<router-link to="/red">红页</router-link>-->
    12                 红页
    13             </li>
    14             <li @click="changePage('/blue')" :class="{active: currentPage === '/blue'}">
    15                 <!--<router-link to="/blue">蓝页</router-link>-->
    16                 蓝页
    17             </li>
    18             <li @click="changePage('/tan')" :class="{active: currentPage === '/tan'}">
    19                 <!--<router-link to="/tan">土页</router-link>-->
    20                 土页
    21             </li>
    22         </ul>
    23     </div>
    24 </template>
    25 
    26 <script>
    27     export default {
    28         name: "Nav",
    29         data() {
    30             return {
    31                 // 没渲染一个页面,都会出现加载Nav组件,currentPage就会被重置,
    32                 // 1)在点击跳转事件中,将跳转的页面用 数据库 保存,在钩子函数中对currentPage进行数据更新
    33                 // currentPage: localStorage.currentPage ? localStorage.currentPage: ''
    34                 // 2)直接在created钩子函数中,获取当前的url路径,根据路径更新currentPage
    35                 currentPage: ''
    36             }
    37         },
    38         methods: {
    39             changePage(page) {
    40                 // console.log(page);
    41                 // 当Nav出现渲染,该语句就无意义,因为在data中将currentPage重置为空
    42                 // this.currentPage = page;
    43 
    44                 // 有bug,用户不通过点击,直接修改请求路径完成页面跳转,数据库就不会更新数据
    45                 // localStorage.currentPage = page;
    46 
    47                 // 任何一个标签的事件中,都可以通过router完成逻辑条件
    48                 // console.log(this.$route);  // 管理路由数据
    49                 // console.log(this.$router);  // 管理路由跳转
    50                 this.$router.push(page);  // 路由的逻辑跳转
    51             }
    52         },
    53         // 当前组件加载成功,要根据当前实际所在的路径,判断单选激活标签
    54         created() {
    55             // console.log(this.$route.path);
    56             this.currentPage = this.$route.path;
    57         }
    58     }
    59 </script>
    60 
    61 <style scoped>
    62     .nav {
    63         width: 100%;
    64         height: 60px;
    65         background-color: orange;
    66     }
    67     .nav li {
    68         float: left;
    69         font: normal 20px/60px '微软雅黑';
    70         padding: 0 30px;
    71     }
    72     .nav li:hover {
    73         cursor: pointer;
    74         background-color: aquamarine;
    75     }
    76     .nav li.active {
    77         cursor: pointer;
    78         background-color: aquamarine;
    79     }
    80 </style>
    View Code

     

     

  • 相关阅读:
    ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers
    Discuz!NT中集成Memcached分布式缓存
    Memcached 两款.NET客户端的郁闷事儿
    分布式缓存BeIT Memcached简介
    .NET平台上的Memcached客户端介绍(Memcached Providers)
    PhantomJs 与 Casperjs
    ES5 Object.defineProperties / Object.defineProperty 的使用
    关于每天必做、且需要立刻执行、立刻培养的事
    我最喜欢的模板jade(pug)学习和使用
    前端 使用 crypto-js 对数据进行对称加密
  • 原文地址:https://www.cnblogs.com/zahngyu/p/11651482.html
Copyright © 2011-2022 走看看