1.安装nodejs服务器。
 
 java 
 项目可以运行在 
 tomcat 
 服务器,开始完成前后端完全分离。前端有自己独立的工程。我们需  
 
 
 要把前端独立的工程运行起来。 
 --- 
 运行在 
 nodejs 
 服务器下。  
 
 
 理解为 
 tomcat 
 服务器  
 
 
 
 
  安装成功后在命令窗口查看 
 
 
  
  
 
 1.1 安装npm
 
   java 
   项目需要依赖 
   jar 
   ,安装 
   maven 
   。 前端项目需要依赖第三方的插件。比如 
   axios elementui  
  
 
   
   echarts  
   前端也需要一个管理组件的软件。 
   npm.  
   如果 
   package.json 
   文件 类似于 
   pom.xml 
   文件。  
  
 
   
   npm 
   通过该文件 
   package.json 
   文件安装依赖的插件。  
  
 
   
   如果安装了 
   node  
   默认 安装了 
   npm.  
  
 
   
   验证 
   :  
  
 
  npm -v
 
 
  2. 安装vue cli的脚手架
帮你创建前端项目工程。它的安装需要依赖上面的npm
2.1 安装vue cli
npm install -g @vue/cli
 
     -g: global  
     全局  
    
 
     
      验证是否安装成功 
      :  
     
 
      
      vue --version  
     
 
      
 
     3. 使用vuecli搭建vue前端项目
 
       第一种使用命令 
       : vue create  
      
 
       
       第二种使用图形化界面: 
        vue ui  
      
 
       
 
       
 
       
 
       
 
       
 
      3.1 安装相应的插件--elementui
 
        安装插件有两种方式 
        :  
       
 
        
        第一种使用命令 
        : npm i element-ui -S  
       
 
        
        第二种使用图形化 
        : 
       
 
        
 
       2.2 安装axios依赖
 
         发送异步请求的。  
        
 
         
         第一种命令 
         : npm i -S axios  
        
 
         
         第二种图形化 
         : 
         如下 
        
 
         
 
        4. 使用客户端软件打开vue工程
 
          vscode [ 
          专业的前端工具 
          ]  
         
 
          
          webstorm [idea 
          团队开发的软件 
          -- 
          只要会使用 
          idea 
          那么也会使用该工具 
          ]  
         
 
          
          hbuilder [ 
          适合前端 
          ]  
         
 
          
 
          
           在 
           webstorm 
           中启动该项目 
          
 
           
 
           
            vue 
            原理 
           
 
            
 
           5. 组件化开发
组件化:一个页面可以拆分成一个个组件,每个组件有着自己独立的结构 [html] 、样式 [css] 、行为[js] 。好处:便于维护,利于复用 → 提升开发效率。组件分类:普通组件、根组件。比如:下面这个页面,可以把所有的代码都写在一个页面中,但是这样显得代码比较混乱,难易维护。咱们可以按模块进行组件划分
 
 
            6. 根组件 App.vue
 
              1. 
              根组件介绍  
             
 
              
              整个应用最上层的组件,包裹所有普通小组件  
             
 
              
 
              
               2. 
               组件是由三部分构成 
              
 
               
                三部分构成  
               
 
                
                template 
                :结构 (有且只能一个根元素)  
               
 
                
                script: js 
                逻辑  
               
 
                
                style 
                : 样式 
                 ( 
                可支持 
                less 
                ,需要装包 
                )  
               
 
                
                让组件支持 
                less  
               
 
                
                ( 
                1 
                ) 
                 style 
                标签, 
                lang="less"  
                开启 
                less 
                功能  
               
 
                
                ( 
                2 
                ) 装包 
                : yarn add less less-loader -D  
                或者 
                npm i less less-loader -D  
               
 
               7. 普通组件的注册使用
 
                 普通组件的注册有两种方式。  
                
 
                 
                 ( 
                 1 
                 )局部注册:  
                
 
                 
                 ( 
                 2 
                 )全局注册  
                
 
                 
                    
                  普通组件的注册使用 
                  - 
                  局部注册  
                 
 
                  
                  1. 
                  特点:  
                 
 
                  
                  只能在注册的组件内使用 
                 
 
                  
                  2. 
                  步骤:  
                 
 
                  
                  1.  
                  创建 
                  .vue 
                  文件(三个组成部分)  
                 
 
                  
                  2.  
                  在使用的组件内先导入再注册,最后使用  
                 
 
                  
                  3. 
                  使用方式:  
                 
 
                  
                  当成 
                  html 
                  标签使用即可 
                   < 
                  组件名 
                  ></ 
                  组件名 
                  >  
                 
 
                  
                  4. 
                  注意:  
                 
 
                  
                  组件名规范 
                   —>  
                  大驼峰命名法, 如 
                   AAAHeader 
                 
 
                  
                   5. 
                   语法: 
                  
 
                  // 导入需要注册的组件
// import 组件对象 from '.vue文件路径'
import AAAHeader from './components/AAAHeader'
export default {• // 局部注册
components: {
'组件名': 组件对象,
AAAHeader:AAAHeader,
AAAHeader
}
} 
                      
                    普通组件的注册使用 
                    - 
                    全局注册  
                   
 
                    
                    1. 
                    特点:  
                   
 
                    
                    全局注册的组件,在项目的 
                    任何组件 
                    中都能使用  
                   
 
                    
                    2. 
                    步骤  
                   
 
                    
                    1.  
                    创建 
                    .vue 
                    组件(三个组成部分)  
                   
 
                    
                    2.  
                    main.js 
                    中进行全局注册  
                   
 
                    
                    3. 
                    使用方式  
                   
 
                    
                    当成 
                    HTML 
                    标签直接使用  
                   
 
                    
                    < 
                    组件名 
                    ></ 
                    组件名 
                    >  
                   
 
                    
                    4. 
                    注意  
                   
 
                    
                    组件名规范 
                     —>  
                    大驼峰命名法, 如 
                     AAAHeader  
                   
 
                    
                    5. 
                    语法  
                   
 
                    
                    Vue.component(' 
                    组件名 
                    ',  
                    组件对象 
                    ) 
                   
 
                    
                   8. 组件通信
 
                     1. 
                     什么是组件通信?  
                    
 
                     
                     组件通信,就是指 
                     组件与组件 
                     之间的 
                     数据传递  
                    
 
                     
                     组件的数据是独立的,无法直接访问其他组件的数据。  
                    
 
                     
                     想使用其他组件的数据,就需要组件通信  
                    
 
                     
                     2. 
                     组件之间如何通信  
                    
 
                     
 
                     
                      3.  
                      组件关系分类  
                     
 
                      
                      1.  
                      父子关系  
                     
 
                      
                      2.  
                      非父子关系 
                     
 
                      
 
                      
                       5. 
                       父子通信流程  
                      
 
                       
                       1.  
                       父组件通过  
                       props  
                       将数据传递给子组件 
                        [ 
                       重点 
                       ]  
                      
 
                       
                       2.  
                       子组件利用  
                       $emit  
                       通知父组件修改更新  
                      
 
                       
 
                       
                        6. 
                        父向子通信代码示例  
                       
 
                        
                        父组件通过 
                        props 
                        将数据传递给子组件  
                       
 
                        
                        父组件 
                        App.vue 
                       
 
                        
 
                        
                         父向子传值步骤  
                        
 
                         
                         1.  
                         给子组件以添加属性的方式传值  
                        
 
                         
                         2.  
                         子组件内部通过 
                         props 
                         接收  
                        
 
                         
                         3.  
                         模板中直接使用 
                          props 
                         接收的值  
                        
 
                        9.路由介绍
9.1.思考
 
                          单页面应用程序,之所以开发效率高,性能好,用户体验好  
                         
 
                          
                          最大的原因就是: 
                          页面按需更新  
                         
 
                          
 
                          
                           比如当点击【发现音乐】和【关注】时, 
                           只是更新下面部分内容 
                           ,对于头部是不更新的  
                          
 
                           
                           要按需更新,首先就需要明确: 
                           访问路径 
                           和  
                           组件 
                           的对应关系!  
                          
 
                           
                           0. 
                           子组件向父组件传值  
                          
 
                           
                           1. 
                           什么是路由  
                          
 
                           
                           2. 
                           如何配置路由  
                          
 
                           
                           3. 
                           路由传参  
                          
 
                           
                           4. 
                           前端访问后端代码  
                          
 
                           
                           5 
                           访问路径 和 组件的对应关系如何确定呢?  
                           路由 
                          
 
                           
                            路由 
                            : 
                            就是路径和组件建立关联关系的过程。  
                           
 
                           9.2 vue中如何使用路径
 
                            我们刚才演示了路由的基本使用。 
                            --- 
                            通过在地址栏输入路由地址,在根据路由配置找到对应的组  
                           
 
                            
                            件,并渲染该组件。  
                           
 
                            
                            ( 
                            1 
                            )第一种 
                            :  
                            声明式路径 
                           
 
                            
                           <router-link to="/login">登录</router-link>     
                             ( 
                             2 
                             )第二种 
                             :  
                             编码式路径  
                            
 
                            methods:{
my(){
//路由跳转---编码式路由
this.$router.push("/register")
}
}9.3. 路由传递
9.3.1 声明路由--查询参数
 
                              类似于之前  
                              路由也是这种模式  
                             
 
                              
                              对应的组件接受查询参数。  
                             
 
                              
                              this.$route.query. 
                              参数名  
                             
 
                             9.3.2 声明路由--动态路由参数
 
                              2.  
                              路由配置时 
                              : { path="/ 
                              路由路径 
                              /: 
                              参数名 
                              "}  
                             
 
                              
                              3.  
                              相应的组件中接受参数值 
                               this.$route.params. 
                              参数名  
                             
 
                             9.3.3 查询参数和动态路由参数
 
                              1.  
                              查询参数传参 
                               ( 
                              比较适合传 
                              多个参数 
                              )  
                             
 
                              
                              1.  
                              跳转: 
                              to="/path? 
                              参数名 
                              = 
                              值 
                              & 
                              参数名 
                              2= 
                              值 
                              "  
                             
 
                              
                              2.  
                              获取: 
                              this.$route.query. 
                              参数名  
                             
 
                              
                              2.  
                              动态路由传参 
                               ( 
                              优雅简洁 
                              ,传单个参数比较方便 
                              )  
                             
 
                              
                              1.  
                              配置动态路由: 
                              path: "/path/: 
                              参数名 
                              "  
                             
 
                              
                              2.  
                              跳转: 
                              to="/path/ 
                              参数值 
                              "  
                             
 
                              
                              3.  
                              获取: 
                              this.$route.params. 
                              参数名  
                             
 
                              
                              <router-link to="/login"> 
                              登录 
                              </router-link>      
                             
 
                              
                              1  
                             
 
                              
                              methods:{  
                             
 
                              
                              my(){  
                             
 
                              
                              // 
                              路由跳转 
                              --- 
                              编码式路由  
                             
 
                              
                              this.$router.push("/register")  
                             
 
                              
                              }  
                             
 
                              
                              }  
                             
 
                              
                              
                              const originalPush = VueRouter.prototype.push  
                             
 
                              
                              // 
                              修改原型对象中的 
                              push 
                              方法  
                             
 
                              
                              VueRouter.prototype.push = function push(location) {  
                             
 
                              
                              return originalPush.call(this, location).catch(err => err)  
                             
 
                              
                              }  
                             
 
                              
                              
                              5 
                              注意:动态路由也可以传多个参数,但一般只传一个  
                             
 
                              
                              准备传递参数 
                              --- 
                              查询参数和动态路由参数 
                             
 
                              
                             9.3.4 编码路由--查询参数
my(){
//路由跳转---编码式路由
//简写版:
//this.$router.push("/my?name=ldh&age=18")
//完整版
this.$router.push({
path: "/my",
query:{
name:"张嘉琪",
age:88
},
})
} 
                              接受:  
                             
 
                             created() {
this.name=this.$route.query.name;
this.age=this.$route.query.age;
}9.3.5 编码路由--动态路由参数
//动态路由参数--简介版
// this.$router.push("/my/zcj")
this.$router.push(
{
// path:"/my", //表示路由的path的值
name:"My", //表示路由的名称
params:{
key:"wzy"
}
}
)
//path不能和params配合使用。 name可以和params配合使用 
                               接受参数 
                              
 
                              //create()
created() {
this.name=this.$route.params.key;
// this.name=this.$route.query.name;
// this.age=this.$route.query.age;
}当出现NavigationDuplicated: Avoided redundant navigation to current location: "/register".问题时
 
                                解决方案 
                                : /router/index.js  
                                添加如下代码 
                                Vue-Router3.0 
                               
 
                               const originalPush = VueRouter.prototype.push
//修改原型对象中的push方法
VueRouter.prototype.push = function push(location) {
return originalPush.call(this, location).catch(err => err)
}

















