vue项目

vue-cli创建项目

前端做成项目---》使用工具(vue-cli),创建出vue项目,单页面应用,组件化开发
把xx.vue,ts,saa,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,不是把md5变为原来的数据,而是使用其他的数据也能编译出来一样的md5,这样就可以添加其他很多非法的东西

解释型语言和编译型语言

	-js,node,php,python    解释型语言   运行解释器之上   pyinstaller
    -c,go,c++               编译型语言   直接把源代码编译成不同平台的可执行文件
    	-cpython解释器用c写的----》编译成不同平台的可执行文件---》在不同平台双击运行即可
        	-win
            -mac
            -linux
    -java:一处编码处处运行
    	-java 虚拟机 ---》虚拟机跨平台
        -java字节码文件运行在虚拟机之上
        -java写了代码----》编译成字节(区别与可执行文件  jar,war,.class

创建vue项目

创建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 # 使用图形化界面创建项目 ,自己点击即可

image

image

image

image

vue项目目录介绍

# pychrm 打开项目,运行项目的两种方式
	-在命令行中执行(注意路径)
    	-npm run serve
    -使用 pycharm ,点击绿色箭头执行

image

vue项目目录介绍
myfirstvue				# 项目名
	node_modules		# 非常多第三方模块,以后把项目复制给别人时【上传git要忽略掉】,这个文件夹删掉,很多小文件,项目的依赖,项目要运行,没有它不行,如果没有只需要执行cnpm install,根据package.json的依赖包,按装好依赖
    public			 # 文件夹
    	-favicon.ico		# 网站小图标
       	-index.html			# spa单页面应用,以后要整个vue项目都是用这一个html,但是不用动他
     src			# 文件夹-以后都是动这里面的内容
    	-assets		# 静态资源,以后前端用的图片,js,css都放在这里
        logo.png		# 图片
       -components		# 以后在这里放组件,xx.vue,小组件
    		HelloWorld.vue		# 提供的展示组件
       -router			# 安装了Router,就会有这个文件夹,下面有个index.js
    	 -store               # 安装了Vuex,就会有这个文件夹,下面有个index.js
            -index.js
      -views               # 页面组件
            -AboutView.vue
            -HomeView.vue
       -App.vue            # 根组件,new Vue实例管理了 div,以后原来写在div中的东西,现在都写在App.vue
       -main.js            # 项目的启动入口

        .gitignore             # git的忽略文件,后面学了git就会了
        babel.config.js        # bable配置文件,不用动
        jsconfig.json          # 配置文件,不用动
        package.json           #不用动,安装了第三方模块,它自动增加
        package-lock.json      # 锁定文件,忽略掉
        README.md              #  用户手册
        vue.config.js          # vue的配置文件

es6导入导出语法

APP.vue,main.js,About.vue写了什么

### 看xx.vue组件学到的重点#####
以后,开发vue项目,都按照这个模式来
1.新建xx.vue
2.在xx.vue中就三块内容
	1.以后组件的html内容,都写在这里
 	<template>
	</template>
   2.以后该组件使用的样式,都写在这里
	<style>
    </style>
   3.以后js的东西,都写在这
	<script>
	</script>
   
### main.js学到的
找到index.html中的id为app的div,以后都在App.vue中写
new Vue({
  render: h => h(App)
}).$mount('#app')

导入导出语法

python创建包,在其他py文件中导入
		from xxx import xx
    
js从es6开始,也支持包的导入和导出
	### 默认导入语法(用的最多),只能到处一个,一般到处一个对象
    -导出语法:
        export default  一般是个对象
	-导入语法:
		 import 别名 from '路径'
       这样别名就是导出的对象
    
    
    ### 命名导出导入
    -导出语法:可以导出多个
        export const name='彭于晏'
        export const add = (a,b)=>{
            console.log(name)
            return a+b 
        }
    	export conse age = 19
     
    -导入语法
    	import {name,add} from './lqz/s1'
        console.log(name)
        console.log(add(33,44))
     
 
导入的简写形式
	-包下的 index.js 导入的时候,不用写到index.js的路径  --->它等同于ptyhon的__init__.py
    
    -例如:
        包是
        lqz
        	-index.js
       导入的时候
    		import lqz from './lqz'

vue项目编写步骤

以后只需要写xx.vue
	-页面组件
    -小组件		给页面组件用的
 
组件中导出
	export defaule {
        name:'HelloWorld',
        data(){
            return {
              xx:'彭于晏'
            }
        },
    }

在别的组件中要用,导入,注册
导入
import HelloWorld from '../components/HelloWorld.vue'
# 注册
    export default {
      components: {
        HelloWorld 
      }
    }
    
注册以后,在这个组件中就可以使用导入的组件 ,写在<template>
	# 自定义属性
	<HelloWorld msg="传进来的p"/>

小练习-登录功能

App.vue 动了

<template>
  <div id="app">

    <router-view/>
  </div>
</template>

main.js

# 没有动
import Vue from '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')

访问根路径

访问根 显示 HomeView.vue 这个页面组件
	-HomeView使用了Helloworld.vue
    -自定义属性
访问/about 会显示AboutView.vue组件

使用axios

安装
	cnpm install axios -S    # 带着-S会自动把当前依赖加入到package.json中
   或者用
	npm install axios -S
导入(按照的第三方模块,直接导入)
	import axios from 'axios'
 
使用
	import axios from 'axios'

export default {
  name: 'AboutView',
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    handleClick() {
      console.log(this.username, this.password)
      // 发送ajax请求
      axios.post('http://127.0.0.1:8000/login',
          {username: this.username, password: this.password}).then(res => {
        alert(res.data.msg)
      })
    }
  }
}

解决跨域问题

1.装模块
	pip3 install django-cors-headers -i https://pypi.tuna.tsinghua.edu.cn/simple/
2.注册app
	'corsheaders'
3.修改中间件
	'corsheaders.middleware.CorsMiddleware',
4.修改配置文件
	CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
	'DELETE',
	'GET',
	'OPTIONS',
	'PATCH',
	'POST',
	'PUT',
	'VIEW',
)

CORS_ALLOW_HEADERS = (
	'XMLHttpRequest',
	'X_FILENAME',
	'accept-encoding',
	'authorization',
	'content-type',
	'dnt',
	'origin',
	'user-agent',
	'x-csrftoken',
	'x-requested-with',
	'Pragma',
	'token'
)

scoped

# 父组件的样式,在子组件中会生效,加入scoped让该样式只在当前组件中生效
<style scoped>
h1 {
  background-color: chartreuse;
}
</style>

props其他

# 安装依赖
	cnpm install

# 做成纯净的vue项目
	-在router的index.js中删除about路由
 	-删除所有小组件和abuout页面组件
   -APP.vue只留
		<template>
      <div id="app">
        <router-view/>
      </div>
    </template>
自定义属性,在子组件中接收传入的数据

# 方式一:使用数组
props:['name']
# 方式二:使用对象
props:{name:Number}
# 方式三:使用对象,默认值和必填
 props: {
    name: {
      type: String, //类型
      required: true, //必要性
      default: '老王' //默认值
    }
  }

混入mixin

# 作用是:可以把多个组件共用的配置提取成一个混入对象

使用步骤:
    1.定义混入对象,新建mixin包下新建index.js
    2.在index.js中写代码(组件会用到的,data,methos。。。配置项)
    	export const lqz = {
            data() {
                return {
                    name: 'zh'
                }
            },

            methods: {
                showName() {
                    alert(this.name)
                },
            },
            mounted() {
                console.log('页面正在挂载执行')
            }
        }
    3.局部使用(值在当前组件中使用)
    
    # 使用插值语法的name就是混入的name,点击事件也是混入的点击事件
      <div class="home">
        <h2 @click="showName">{{name}}</h2>
      </div>
    
    
    	import {lqz} from '@/mixin'

        export default {
            name: 'HomeView',
            components: {},
            mixins: [lqz]    //配置项
        }
     
    4 全局使用(所有组件都可以用) main.js中
    	import {lqz} from '@/mixin'
            Vue.mixin(lqz)
            // Vue.mixin(lqz2)  下面表示可以多个混入
            // Vue.mixin(lqz3)
     5 在组件中,直接使用即可

插件

功能:用于增强Vue
 
本质:包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据
    
# 使用步骤
	1.新建包plugins,新建index.js
    import Vue from "vue";
    import axios from "axios";
    export default {
    install(vue) {
        console.log('执行了插件', vue)
        // 可以做的事
        // 1.了解,自定义指令(了解)
        // 2.定义全局变量,以后在任何组件中都可以使用到,借助于Vue.prototype往里放,
        // 以后所有组件只要this.$ajax,就是axios对象
        Vue.prototype.$ajsx = axios
        // 3.使用全局混入
        // 4.自定义全局组件

        	}
        }
    2.在main.js中配置
    	# 使用自定义插件
        import plugin from '@/plugins'
    		Vue.use(plugin)

elementui使用(重点)

# 在vue上,css样式,用的最多的是elementui,但是还有其他的
	-elementui        做网页端 样式用的多  vue2的 饿了吗团队开发的
    -elementui-plus   第三方团队继续基于vue3写的
    -vant             做app的样式
    -iview            pc端用www.iviewui.com
    
    
    
# elementui的使用
	1 安装
    	cnpm i element-ui -S
    2 配置完整引入  在 main.js 中写入以下内容
        import ElementUI from 'element-ui';
        import 'element-ui/lib/theme-chalk/index.css';
        Vue.use(ElementUI)  // 以后在咱们组件中直接使用elementui提供的全局组件即可
	3 在组件中使用
    	-去官网看到好的,复制贴到你的项目中

vues

在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信


# 使用步骤
	1.新建store/index.js
 	2 在index.js 中写
        export default new Vuex.Store({
            state: {
                # 放数据
            },

            mutations: {
                # 放方法,正常是让actions中来调用
                # 组件也可以直接调用

            },
            actions: {
                # 放方法,正常组件调用
            }
        })
   	3.在组件中
    	-显示state的变量
        html中:{{$store.state.变量名}}
        js中:this.$store.state.变量面
       改state中的值:
        ---按照正常步骤走:this.$store.dispatch('actions中的方法',参数)---》actions中的方法调用 context.commit('mutations',参数)---》在mutations中直接修改state的值
         ---可以跨过任何一步
        this.$store.commit()
                this.$store.state.变量名

代码展示

vue文件中

        <template>
          <div class="home">
        	# 这里显示state里面所定义的数据
            <h1>{{$store.state.num}}</h1>
           # 这里是一个点击事件,点击触发改变state里面的数据值
            <button @click="addClick">点击增加</button>
          </div>

        </template>

        <script>


        export default {
          name: 'HomeView',
          methods:{
            addClick(){
          # 点击事件触发,$store.dispatch方法,其实是actions里面定义的方法,传参
              this.$store.dispatch('add',1)
            },
          },
        }
        </script>

store里面的方法

        import Vue from 'vue'
        import Vuex from 'vuex'

        Vue.use(Vuex)

        export default new Vuex.Store({
            state: {
                // 放数据
                num: 1
            },
            getters: {},
            mutations: {
          //直接在这个方法里面定义方法改变state里面的数据值
                add(state, value) {
                    state.num += value
                }
            },
            actions: {
           //在vue界面触发这个方法的执行,固定的参数,然后这个方法触发mutations里面方法的执行
                add(context, value) {
                    context.commit('add', value)
                }
            },
            modules: {}
        })

vue Router

第三方插件,用来实现SPA的vue插件
    -单页面应用---》实现在一个index.html中有页面跳转效果的,插件
    -路由控制
    -<router-link>   跳转用
    -<router-view/>  替换页面组件用
 
基本使用
	-1 创建vue项目时加入了,直接用即可
    -如果之前没装,先下载,在项目中创建router包,写个index.js如果有就不用写
    
   -2 配置路由的跳转(跳转页面组件),只需要在routes数组中写对象即可
		const routes = [
            {
                path: '/',		// 这里表示路径
                name: 'index',		//起别名跟我们django类似
                component: Index	//路径触发的vue组件
            },
            {
                path: '/home',
                name: 'home',
                component: Home
            }
        ]
    -3 一定要写个视图组件 Home

路由跳转的两种方式一:

js控制:绑定一个点击事件,触发直接跳转链接
    <button @click="addClick">点击跳转登录</button>
    addClick(){
      this.$router.push('login')
    }

标签控制:直接是一个链接的标签,点击就会自动跳转
	<router-link to="/login">点击跳转登录</router-link>

两种跳转方式二:

使用对象方式
-this.$router.push({
        name: 'login',	//这里的name就是我们在路由中写的别名
        // query: {
        //   name: 'lqz',
        //   age: 19
        // },
        params: {
          id: 88
        }
      }) # 这里可以写个对象

-标签形式跳转,传对象形式
    <router-link :to="{name: 'login', query: {name: 'lqz'}, params: {id: 999}}">
      <button>点我跳转到home页面</button>
    </router-link>

路由跳转携带数据的两种方式

1. /course/?pk=1		带在路径中使用?携带
	拿数据:this.$route.query.pk
2. /course/1/			路径中携带的
	-router/index中路径需要改一下
         	{
             path: '/login/:id',
             name: 'login',
             component: Login
                },
	拿数据:this.$route.params.id
        
        
区分this.$route和this.$router
	-this.$route  # new VueRouter对象,实例,可以实现路由的跳转
   -this.$route  # 是当前路由对象,内部有传入的参数

路由守卫

全局守卫
	-前置路由守卫,在进路由前,执行代码
	-后置路由守卫,路由跳转走,执行代码
    
    
如何用:router/index.js 加入
    // 全局前置路由守卫--->任意路由跳转都会触发它的执行
router.beforeEach((to, from, next) => {
    // to 是去哪,哪个路由对象
    // from 是来自哪,是哪个路由对象  比如从  /--->/login
    // next 是函数,如果加括号执行,就会真正的过去
    console.log('前置路由守卫', to, from, next)
    // next() // 真正跳转到 要去的路径

    if (to.name == 'login') {
        console.log('走了')
        next()
    } else {
        var res = localStorage.getItem('userinfo')
        if (res) {
            next()
        } else {
            alert('您没有登录')
            // 跳转到login--->没有解决---》你们搜一下如何解决
            // console.log(this)
            // router.push('/login')
        }
    }
})

locklStorage系列

都是在浏览器中存储数据的---》存数据有什么用?
	-登录成功,token存在本地
    -不登录加入购物车功能,迪卡侬存在了localStorage中
    -组件间通信---》跨组件

localStorage
	-永久存储,除非清空缓存,手动删除,代码删除
    localStorage.setItem('userinfo',JSON.stringify(this.userinfo))  //存数据
    console.log(localStorage.getItem('userinfo'))  // 拿数据
    localStorage.clear()      //清除全部
    localStorage.removeItem('userinfo')  //清除指定
 
sessionStorage
	-关闭浏览器,自动清理
    -sessionStorage.setItem('userinfo', JSON.stringify(this.userInfo))
    -sessionStorage.getItem('userinfo')
    -sessionStorage.clear()  // 清空全部
    -sessionStorage.removeItem('userinfo') 
    
cookie  
	-有过期时间,到过期时间自动清理
    -借助于第三方 vue-cookies
    -cookies.set('userinfo', JSON.stringify(this.userInfo))
    -cookies.get('userinfo')
    -cookies.delete('userinfo')
posted @   雪语  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示