vue框架学习
vue框架学习
Vue项目环境搭建
创建Vue项目之前必须搭建好Vue的环境,就像python一样,需要安装相应版本的解释器,安装解释器又需要安装pycharm解释器,所以,Vue也一样。
首先,先下载并安装好node环境,node就是用c++编写的用来运行js代码的,类似于pycharm
其次,安装好node后,就有了npm,npm就类似于python的pip,相当于应用商城,我们想要的Vue就在npm中。
有了npm就能安装vue环境了,由于默认的镜像源比较慢,所以换一下国内的镜像源:npm install -g cnpm --registry=https://registry.npm.taobao.org
换源之后,就有了新的cnpm了,然后就可以安装vue项目脚手架:cnpm install -g @vue/cli
如果安装失败了,可以清空npm缓存,在重复执行失败的步骤:npm cache clean --force
Vue项目创建
- 进入存放项目的目录:
cd ...
- 创建项目:
vue create ...
- 项目初始化:有一系列选项,按需求选择即可
- 提前进入项目根目录,启动项目:
npm run serve
- 在项目根目录下打包项目:
npm run build
pycharm配置并启动vue项目
在pycharm中open打开vue项目,左上角添加配置npm启动按钮。
vue项目目录结构分析
├── v-proj
| ├── node_modules // 当前项目所有依赖,一般不可以移植给其他电脑环境
| ├── public
| | ├── favicon.ico // 标签图标
| | └── index.html // 当前项目唯一的页面
| ├── src
| | ├── assets // 静态资源img、css、js
| | ├── components // 小组件
| | ├── views // 页面组件
| | ├── App.vue // 根组件
| | ├── main.js // 全局脚本文件(项目的入口)
| | ├── router
| | | └── index.js// 路由脚本文件(配置路由 url链接 与 页面组件的映射关系)
| | └── store
| | | └── index.js// 仓库脚本文件(vuex插件的配置文件,数据仓库)
| ├── README.md
└ └── package.json等配置文件
vue-main.js
/**
* 1.入口文件:加载vue、router、store等配置 以及 加载自定义配置(自己的js、css,第三方的js、css)
* 2.创建项目唯一根组件,渲染App.vue,挂载到index.html中的挂载点 => 项目页面显示的就是 App.vue 组件
* 3.在App.vue中设置页面组件占位符
* 4.浏览器带着指定 url链接 访问vue项目服务器,router组件就会根据 请求路径 匹配 映射组件,去替换App.vue中设置页面组件占位符
* eg: 请求路径 /user => 要渲染的组件 User.vue => 替换App.vue中的 <router-view/>
*/
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');
vue-index.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>v-proj</title>
</head>
<body>
<div id="app">
<!-- 提供一个挂载点,用来渲染App.vue组件 -->
</div>
</body>
</html>
vue-App.vue
<template>
<div id="app">
<!--提供一个视图组件占位符,占位符被哪个views下的视图组件替换,浏览器就显示哪个页面组件-->
<router-view/>
</div>
</template>
vue-views
views里面存放的是多个组件,可替换App.vue下的占位符,显示在index.html中。
<!--
.vue文件就是一个组件:由三部分构成:html、css、js
html由template标签提供:有且只有一个根标签
css由style标签管理:style标签添加scope属性,保证样式只在该组件内部起作用(样式组件化)
js由script标签管理:内部书写的就是组件{}语法,但是一定要导出 export default
-->
<template>
</template>
<script>
// 两种导入子组件的方式:@代表/src,也就是项目的绝对路径,..返回上一层的相对路径
import Nav from '@/components/Nav.vue'
import Footer from '../components/Footer.vue'
export default {
name: "waef",
data:{
return {
// 组件中用到的数据
}
},
components:{
// 注册子组件
Nav,
Footer,
},
methods:{
// 组件中的事件指令函数
}
}
</script>
<style scoped>
</style>
vue-components
components中存放的是views中的组件能够用到的小组件,可重复使用。
vue-router-index.js
要使views中的组件能够渲染出来,必须要index.js中注册,并且配置路由规则。
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import User from '@/views/User'
import BookDetail from '@/views/BookDetail.vue'
Vue.use(VueRouter);
// 路由规则表:注册页面组件,与url路径形成映射关系
const routes = [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/index',
redirect: '/'
},
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
});
export default router
注意:vue项目中,父组件给子组件提供静态资源(图片)时,需要传输后再使用,必须用require函数先加载之后再传过去。let img1 = require('../assets/img/西游记.jpg');
注意:当你循环组件时,需要在组件标签中指定key属性,属性值必须是循环对象的唯一标识。
vue生命周期钩子
- 表示一个vue实例从创建到销毁的这个过程,将这个过程的一些时间节点赋予了对应的钩子函数
- 钩子函数: 满足特点条件被回调的方法
详解:
-
beforeCreate:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
-
created:在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,
$el
属性目前不可见。 -
beforeMount:在挂载开始之前被调用:相关的
render
函数首次被调用。该钩子在服务器端渲染期间不被调用。 -
mounted:
el
被新创建的vm.$el
替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个文档内元素,当mounted
被调用时vm.$el
也在文档内。 -
beforeUpdate:数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。该钩子在服务器端渲染期间不被调用,因为只有初次渲染会在服务端进行。
-
updated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性或 watcher 取而代之。
-
avtivated:keep-alive 组件激活时调用。该钩子在服务器端渲染期间不被调用。
-
deactivated:keep-alive 组件停用时调用。该钩子在服务器端渲染期间不被调用。
-
beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。该钩子在服务器端渲染期间不被调用。
-
destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。
-
errorCaptured:当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回
false
以阻止该错误继续向上传播。