• 【Vue】vue项目目录介绍 es6的导入导出语法 vue项目开发规范 Vue项目编写步骤


    昨日回顾

    # 1 计算属性
        -属性放在data配置项中,方法放在methods中
        -computed:{
            方法名(){}
        }
        -把它当属性用,缓存:只有当该计算属性使用的变量发生变化时,它才重新运算
        
       
    # 2 重写过滤案例
        - 通过计算属性,重写过滤案例
            -newDataList做成计算属性,v-for直接循环它
            -newDataList使用的变量只要发生变化,它就会重新运算,使用了mytext,只要input输入内容,它就会重新运算,不需要加事件了
            
    # 3 监听属性
        - data中定义的属性,可以使用watch绑定一个方法,以后只要这个属性发生变化,就会触发方法的执行
        - watch:{
            page(){
                
            }
        }
        
    # 4 组件:有自己的html,css,js,以后相用,直接注册使用即可
        -全局,局部
        -var child={template:``,data(){return {}},methods:{}}
        -组件中注册:components:{child}
        
    # 5 组件间通信-组件间数据,方法都是隔离的
        -父传子:自定义属性
            'lqz'>
            -在子组件中:props:['myname']
            
        -子传父:自定义事件
            -子组件中某种情况下把子组件的数据传给父组件
            'handleClick'>
            -点击事件函数内部:this.$emit('自定义事件名字',name)
            
            
        -ref属性:
            -放在普通标签上: this.$refs.标签上的名字  原生dom对象
            -放在组件上:this.$refs.组件上的名字       组件对象  它有变量,方法
        
     # 6 动态组件
        -不确定显示的组件是什么,动态变化的
        is='变量'>
        -
        
    # 7 插槽
        -写了组件,组件内部,空一个位置 
        -   
    -默认插槽 -具名插槽:挖多个坑,给每个坑命个名 "b">
    "b">
    # 8 vue-cli -对比djagno,创建djagno项目需要怎么做? -装python解释器,安装模块django,django-admin创建项目 -nodejs,安装模块vue-cli -npm install @vue/cli -g -vue 可执行文件 -vue create项目名 -bable -vuex -vue-router -编辑器选择 -jetbrains公司:Pycharm,goland,phpstorm,IDEA,webstorm -pycharm+vue插件 开发前端 -vscode:微软出的,轻量级,免费 -eclipse my eclipse -谷歌买了jetbrains授权, AndroidStadio -sublime Text -vim+插件 -vue项目运行的两种方式 -命令行中执行:npm run serve -pycharm的绿色箭头运行 # 9 学过的配置项 - el(template) - data :组建中 方法 - methods - 8个生命周期钩子 - components - watch - computed

    今日内容

    0 vue-cli创建项目

    node.js环境

    # 前端做成项目----》使用工具(vue-cli),创建出vue项目,单页面应用(spa),组件化开发,  把 xx.vue,ts,saas,less-----》编译---》在浏览器中执行
    
    
    # vue-cli创建项目开发,在项目中开发,最后上线,一定要编译--->纯粹的html,js,css
    
    # 浏览器只能识别 js  html  css
    
    # vue-cli 工具,使用nodejs写的,要运行,需要node环境
    
    # 下载node解释器
        -一路下一步 
        -环境变量:可执行文件路径  就在环境变量
        -两个可执行文件:
            -node:    python
            -npm:     pip
    
    # nodejs 怎么来的
        -js只能运行在浏览器中,因为浏览器中有它的解释器环境
        -基于谷歌浏览器的v8引擎,使它可以运行在操作系统之上   网络包,文件,数据库。。。 用c写的
            -js语法 完成后端的编写,全栈
        -号称性能高,大量使用协程
    
    # 文件防篡改校验
        -把文件生成md5值
        -以后被下载下来,再生成md5值肯定是一样,如果不一样说明被篡改了,不能用了
        
        -1 百度网盘 
            -秒传   
                -传到服务器上---》生成md5---》存着
                -本地生成md5---》发送到服务端---》一查----》有---》不传了
                
            - 屏蔽
            
    
        -2 王小云 破解md5 
            
    
            
            
    # 解释型语言和编译型语言
        -js,node,php,python    解释型语言   运行解释器之上   pyinstaller
        -c,go,c++               编译型语言   直接把源代码编译成不同平台的可执行文件
            -cpython解释器用c写的----》编译成不同平台的可执行文件---》在不同平台双击运行即可
                -win
                -mac
                -linux
        -java:一处编码处处运行
            -java 虚拟机 ---》虚拟机跨平台
            -java字节码文件运行在虚拟机之上
            -java写了代码----》编译成字节(区别与可执行文件  jar,war,.class

    创建vue-cli项目

    # 创建vue项目使用什么?
        -2.x 使用vue-cli :https://cli.vuejs.org/zh/
        -3.x 使用vue-cli
        -vite只能创建vue3 效率非常高
    
        
     # 按装vue-cli
        npm install -g @vue/cli  
        # 使用cnpm替换npm    cnpm淘宝出的工具,下载的时候,去淘宝镜像下载,速度快
        # -g 表示装全局
        #--registry=https://registry.npm.taobao.org 指定淘宝镜像
        npm install -g cnpm --registry=https://registry.npm.taobao.org
            
        # 以后使用cnpm 代替npm
        
        cnpm install -g @vue/cli
        
        # cmd控制台就可以输入 vue 命令(装了djagno可以使用django-admin创建django项目)
            -vue 创建vue项目
        
    # 使用vue-cli创建项目(找个目录)
        vue create myfirstvue   # 速度很慢,等,可以ctrl+c停止 执行npm cache clean --force
        # 很慢的原因
            -从github拉一个空项目
            -按照该项目所有的依赖,npm装
        # 按下图操作
        
        
        vue ui # 使用图形化界面创建项目 ,自己点击即可
    

    1 vue项目目录介绍

    myfirstvue                    # 项目名字
        node_modules              # 文件夹,内部有很多当前项目依赖的模块,可以删除,npm install
        public                    # 文件夹
            -favicon.ico           # 网站小图标
            -index.html            # spa:单页面应用  
        src                       # 以后咱们写代码,都在这下面
        	-assets                # 静态资源,js,css,图片  类似于static文件夹
        		logo.png          # 静态资源的图片
        	-components           # 组件:小组件,用在别的大(页面组件)组件中
        		-HelloWorld.vue   # 默认了一个hello world组件
        	-router                    # 装了vue-router自动生成的,如果不装就没有
        		index.js              # vue-router的配置
        	-store                # 装了vuex自动生成的,如果不装就没有
        		index.js          # vuex的配置
        	-views                # 放了一堆组件,页面组件
                AboutView.vue     # 关于 页面组件
                HomeView.vue      # 主页  页面组件
        	-App.vue              # 根组件
        	-main.js              # 整个项目启动入口
        .gitignore                # git的忽略文件 不用动
        babel.config.js           # babel的配置 不用动
        jsconfig.json             # 配置文件 不用动
        package.json              # 重要:类似于python项目的requirements.txt  当前项目所有依赖
        package-lock.json         # 锁定文件:package.json中写了依赖的版本,这个文件锁定所有版本
        README.md                 # 读我,项目的介绍
        vue.config.js             # vue项目的配置文件
    

    node_modules

    # node_modules是个文件夹,内部有很多当前项目依赖的模块(第三方模块)
    # 没有node_modules项目不能运行
    # 发送给别人的时候需要删除【上传git要忽略掉】,删除了使用cnpm install可以重新安装回来
    

    比如创建python项目时,如果勾选了虚拟环境,会创建一个venv文件夹:

    image-20230219153017766

    这个venv文件夹,放置了一个python解释器的环境,如果你再下了第三方依赖,是安装在这个venv文件夹下的python环境的。好处是,每一个项目都不会互相影响。相当于每一个python项目都有一个自己的解释器。

    而这个node_modules也是类似的效果,存放了很多项目的第三方依赖模块。node_modules是可以删除的(这个文件比较大),如果你要提交到仓库、发送给别人,需要把它删除掉。但是你把node_modules删除掉了,项目就无法启动了(缺乏第三方依赖)。但是可以使用npm install命令,该命令会根据package.json文件给你重新装上这些依赖。

    补充:webpack是代码编译的工具 ---> 编译成只有html、js、css

    index.html

      public                    # 文件夹
            -favicon.ico           # 网站小图标
            -index.html            # spa:单页面应用 
            -assets                # 静态资源,js,css,图片  类似于static文件夹
    

    现在我们写的项目只有一个index.html页面。

    image-20230219154657958

    首页页面组件、登录页面组件、注册页面组件。

    查看index.html内容:

    image-20230219154759382

    所有组件都在这个div内部切换,也就实现首页、登录页面、注册页面切换。这个div很重要,不要在这个标签内写东西。

    通过<%= BASE_URL %>可以找到在public文件夹下的小图标。

    image-20230219155224178

    网站名字是在package.json里面定义的:

    image-20230219155440625

    noscript:image-20230219155550212

    如果你的网站禁用了js:
    image-20230219155618498

    就会显示上面的提示语句:

    image-20230219155635787

    app.vue

    # app.vue是根组件
    

    image-20230219161637404

    根组件的内容会直接替换到index.html页面下的这个div内。

    package.json

    # package.json当前项目的依赖项
    

    image-20230219162010797

    如果删除,npm install就不知道装什么了。

    image-20230220104813445

    package-lock.json

    package.json写了一些项目依赖的版本。

    image-20230219162153804

    这些依赖的版本添加了上箭头^,这表示安装时会装3版本里最新的3.6.2。但是总是安装最新的版本,可能会出现版本不兼容问题。

    lock文件可以对版本进行锁定:

    image-20230219162436086

    以后安装就按照这个锁定版本进行安装,而不是按照package.json文件安装,这样不会出现问题。所以我们也不要动这个lock文件。

    总结:以后经常用的就两个views (写页面),components(写组件)。

    2 es6的导入导出语法

    # node.js中如果要导入,必须先导出
    	-默认导出
        -命名导出
        
    # python创建包,只需要在其他py文件中导入
        
    # 默认导出写法
    	
        # 语法
        -导出语法
        	export default 一般是个对象
        -导入语法
        	import 别名  from '路径'
            以后 别名   就是 导出的对象
        
        # 示例
        1.在js文件中定义变量,函数,最后使用export defalut导出
        export default {
            name: '彭于晏',
            printName () {
                console.log(this.name)
            }
        }
        2 在想使用的js中,导入
        import 随便起 from './lqz/utils'
        
        
    # 命名导出和导入
    	-导出语法  可以导出多个
        export const name = '刘亦菲'
        export const printName = () => {
            console.log('星象衔新宠')
        }
        -导入语法
        import {printName} from './lqz/utils'
        
        
    # 在包下可以建立一个名为index.js 的文件,以后导入的时候,会默认找它
    	-对比python中得__init__.py
    

    main.js文件介绍

    # 找到index.html 中的id为app的div,以后都在App.vue中写
    new Vue({
      render: h => h(App)
    }).$mount('#app')
    

    image-20230219163839547

    main.js是项目的入口,程序运行的时候是从这里开始执行的:

    image-20230219163917672

    解释main.js的代码含义:

    image-20230219164056330

    Vue提供了一些开发过程中的提示,通过如上配置项可以选择是否需要开启这些提示。

    image-20230219164251501

    这里等同于el:'#app',但这是如何做到的呢?

    image-20230219164355907

    $mount这里就是去public/index.html挂载了那个id='app'的div。
    注意public、index这两个名字必须是固定的。

    render后面对应的是一个箭头函数,传入了一个h,返回一个h(app)。
    而这个app是导入进来的:

    image-20230219164739265

    也就是导入了App.vue下的内容:

    image-20230219164836042

    导入这个app之后,用h(app)执行了一下,进行了挂载。

    本质是在App.vue中写的代码,会原封不动的插入到index.html内的div:

    image-20230219165233972

    前期准备

    在src中新建一个文件夹,并创建一个utils.js文件:

    image-20230219171540742

    在utils.js内写代码:

    image-20230219171652242

    我们想在main.js中引入utils.js文件,并使用其中的变量和函数,那么应该怎么做?

    需要先在util.js导出,别的文件才能导入,这一点和python不一样:

    默认导出

    默认导出用的最多,只能导出一次。

    image-20230219172041355

    这相当于导出了一个对象。(还可以使用es6的语法将其简写)
    只有在export default导出的,在别的文件才能导入。

    使用默认导出,没有给导出的对象取一个名字。
    关于默认导出,我们可以这样导入:

    image-20230219172535598

    main.js导入了之后这个xxx,xxx就是之前导出的对象:

    image-20230219172609501

    尽量使用包名作为导入对象的名字:

    image-20230219172707472

    执行项目:

    image-20230219172831934

    f没有导出所以会报错。

    默认导出的其他写法:

    image-20230219172942399

    这里的this指代当前对象,this.name='彭于晏'

    命名导出

    使用命名导出,name相当于一个变量:

    image-20230219193601856

    在main.js导入:
    使用命名导出时,导入的时候可以导入多个名字。

    image-20230219193739247

    注意:同一个需要导出的文件中,默认导出和命名导出不能混用。

    index文件的特殊含义

    将我们需要导入的包中的文件改名为index.js:

    image-20230219194357600

    这样导入的时候就可以直接导包了(如果包下文件名不是index不能这样做):

    image-20230219194511893

    这个index.js就类似于python中的__init__。(导包的时候会自动执行__init__文件)

    3 vue项目开发规范

    # 以后写的组件,都是单页面组件  也就是xx.vue文件 
    
    # 以后写一个组件就是一个xx.vue  xx.vue --分为-> 页面组件和小组件
    
    # 以后一个组件就是一个xx.vue文件,xx.vue文件内部都有三部分
    	-  # html内容写在里面
        	-并且必须套在一个div标签里
        -      # 写js内容
        -        # 写css样式
        
    # main.js 是整个项目的入口
    1 把App.vue根组件导入了
    2 使用new Vue({render: h => h(App)}).$mount('#app') 把App.vue组件中得数据和模板,插入到了index.html的id为app的div中了
    3 以后,只要在每个组件的export default {} 写之前学过的所有js的东西
    4 以后,只要在每个组件的template,写模板,插值语法,指令...
    5 以后,只要在每个组件的style,写样式...
    
    

    Vue项目编写步骤

    # 1 以后只需要写xx.vue   
    	-页面组件
        -小组件   给页面组件用的
        
    # 2 组件中导出
    	export default {
              name: 'HelloWorld',
              data() {
                return {
                  xx: '彭于晏'
                }
              },
    	}
    
    # 3 在别的组件中要用,导入,注册
    	# 导入
    	import HelloWorld from '../components/HelloWorld.vue'
        # 注册
        export default {
          components: {
            HelloWorld 
          }
        }
     # 4 注册以后,在这个组件中就可以使用导入的组件 ,写在