Vue 项目中应用
Vue使用
一、vue生命周期
# 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({
el: '#app',
router,
store,
"render: function (readFn) {
return readFn(App);
},
})
# App.vue
<template>
<div id="app">
<!--
提供一个视图组件占位符,占位符被views下的视图组件替换,
浏览器就显示页面就是哪一个组件
-->
<router-view/>
<router-view/>
<router-view/>
</div>
</template>
# router-->index.js
路由脚本文件(配置路由url链接与页面组件的映射关系)
# views(文件夹)
页面组件
总结:
main.js是vue项目的入口文件,在main.js中加载vue、router(路由)、store(仓库)等配置以及加载自定义配置的js、css,第三方js、css
在项目中只有一个根组件,在index.html中有一个全局的挂载点,渲染的组件会在App.vue中加载,App.vue中提供视图占位符,渲染App.vue,渲染的结果挂载到index.html中的挂载点,在页面显示(项目显示的就是App.vue组件中的占位符对应的组件)
渲染页面:使用App.vue中组件占位符实现页面组件的渲染
Vue服务器根据浏览器发送的url连接请求,首先进入router(路由)组件根据路径映射匹配到的组件,然后去渲染组件,将映射的组件去替换App.vue中设置的页面组件占位符,最终页面显示匹配的组件
eg: 请求路径 /user ===> 首先渲染组件User.vue===>替换App.vue中的<router-view/>
二、.vue文件说明
- vue文件就是一个组件: html、css、js
- html标签由template标签提供:有且只有一个根标签
- CSS由style标签管理: style标签添加scope属性,保证样式只在该组件内部其作用(样式组件化)
- Js由script标签管理: 内部书写的就是组件new Vue({})中在{}编写的语法,但是需要导出export default
三、 vue使用
1.@ 符号
@:代表 /src 也就是src项目绝对路径, @src,src可以省略,eg:'@/views/User'=>src/views/user
2.路由表规则
# 注册页面组件,与url路径形成映射关系
import User from '@/views/User'
const routes = [
{
path: '/user', // url请求链接
name: 'user',
component: User // 对应的组件
}
];
3.页面<a>标签
页面跳转不使用a标签使用router-link进行跳转,a标签跳转会页面刷新,而router-link则不会
<router-link to="/user">用户</router-link>
/*router-link渲染的a激活时的状态, 在浏览器中可以看到*/
a.router-link-exact-active {
color: royalblue;
}
使用小组件:
- 首先导入组件
- import Nav from '../components/Nav' ,其中Nav名字可以随意
- 注册小组件,components
- 使用组件 template标签中使用<Nav/>
4.链接重定向
在路由层进行配置重定向
const routes = [
{
path: '/',
name: 'home',
component: Home
},
// url映射不存在映射到主页
{
path: '/index',
redirect: '/'
},
];
window.console.log(this.$router); // $router管理路由跳转的
window.console.log(this.$route); // $route管理路由数据的
5.v-for循环产生多个标签
<Book v-for="books"></Book>:v-for循环产生多个标签会报错, 因为产生多条数据有可能下面多条数据将上面数据覆盖掉
解决: key的值必须唯一
<!-- key属性是为标签建立缓存的标识,不能重复,且在循环组件下,必须设置 -->
<Book v-for="book in books" :key="book.title" />
6.页面跳转实现
直接使用router-link标签,写入要跳转的路径
<router-link to="/book/detail/">{{ book.title }}</router-link>
通过点击事件实现页面跳转,路由逻辑跳转
<h2 @click="goDetail">{{ book.title }}</h2>
methods:{
goDetail(){
# 路由逻辑跳转(push历史记录的跳转)
this.$router.push('/book/detail')
}
}
根据router路由中的name跳转
<h2 @click="goDetail">{{ book.title }}</h2>
methods:{
goDetail(){
# 路由逻辑跳转(push历史记录的跳转)
this.$router.push(
{
name: 'book-detail',
params: {pk: id} // 携带参数
}
)
}
}
go跳转
// go的参数是正负整数,代表历史记录前进或后退几步
this.$router.go(-1); // go(2)
有名分组
# 有名分组
path: '/book/detail/:pk',
path: '/book/detail/:pk/:acit',
path: '/book/:pk/detail', # 方式一
this.$router.push(
{
name: 'book-detail',
params: {pk: id}
}
)
# 方式二
this.$router.push(`/book/detail/${id}`) # 方式三
<router-link :to="'/book/detail/'+book.id">{{ book.title }}</router-link> # 方式四
<router-link :to="{name: 'book-detail', params: {pk: book.id}}">{{ book.title }}</router-link>
获取有名分组数据
created() {
// 获取跳转到详情页的当前书本id,再根据id获得书本的详细信息
// window.console.log(this.$router); // $router管理路由跳转的
// window.console.log(this.$route); // $route管理路由数据的
let pk = this.$route.params.pk;
if (!(pk in books_detail)) {
this.$router.go(-1); // 数据不存在,返回
},
7.图片静态文件渲染
# 1. img访问图片路径
<!-- 资源的加载绝对路径才可以访问到资源 -->相对路径则不能访问到资源
<img class="../assets/img/1.jpg" :src="book.img" alt="">
# 2. require
<!-- 前台自己提供的静态资源,在传输后再使用(组件间交互),要才有require函数来加载资源 -->
let img1 = require('../assets/img/西游记.jpg');
四、组件生命周期钩子函数
- 一个组件会在页面中渲染,也会销毁存放到内存中不在页面渲染(从一个页面跳转到另一个页面则销毁),就是一个组件的加载和销毁组件
- 从加载一个组件到销毁一个组件,整个的生命周期中勋在很多特殊的时间节点(组件要创建了,创建成功了,要加载了,加载成功了,要更新数据了,数据更新完毕了,组件要销毁了,销毁成功了),这些特殊的时间节点,vue都提供了对应的回调方法,来辅助完成这些时间节点完成的业务逻辑
- 生命周期钩子函数书写的位置:钩子函数直接作为vue实例的成员
- 注意:钩子函数的书写位置,,每个钩子节点钩子函数的特性都在那个时间段触发
export default {
name: "BookDetail",
data() {
return {
num: 10,
book: {}
}
},
// 创建组件获取不到任何数据
beforeCreate() {
window.console.log('该组件要被创建了');
window.console.log(this.num);
},
// 最常用的钩子函数:组件加载后,可以请求后台数据,更新组件数据;组件间路由传参的值获取
created() {
window.console.log('该组件已经创建了');
window.console.log(this.num);
// 获取跳转到详情页的当前书本id,再根据id获得书本的详细信息
// window.console.log(this.$router); // $router管理路由跳转的
// window.console.log(this.$route); // $route管理路由数据的
let pk = this.$route.params.pk;
// window.console.log(pk in {'1': 100, '2': 200});
if (!(pk in books_detail)) {
this.$router.go(-1); // 数据不存在,返回
}
this.book = books_detail[pk];
},
// 当前页面跳转到另一个页面
destroyed() {
window.console.log('该组件已经销毁了')
}
}
1.beforeCreate
在实例初始化之后,数据观测(data observer)和 event/watcher 事件配置之前被调用。
2.created
在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测(data observer)、属性和方法的运算、watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
3.beforeMount
在挂载开始之前被调用,相关的 render 函数将首次被调用。
注意:该钩子在服务器端渲染期间不被调用。
4.mounted
el 被新创建的 vm.el替换,并挂载到实例上去之后调用该钩子。如果root实例挂载了一个文档内元素,当mounted被调用时vm.el 也在文档内。页面渲染完成后初始化的处理都可以放在这里。
注意:mounted 不会承诺所有的子组件也都一起被挂载。
5.beforeUpdate
数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。
你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
6.updated
由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性或 watcher 取而代之。
注意:updated 不会承诺所有的子组件也都一起被重绘。
7.activated
keep-alive 组件激活时调用。
8.deactivated
keep-alive 组件停用时调用。
9.beforeDestroy
实例销毁之前调用。在这一步,实例仍然完全可用。
10.destroyed
Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
五、总结
生命周期
main.js是vue项目的入口文件,在main.js中加载vue、router(路由)、store(仓库)等配置以及加载自定义配置的js、css,第三方js、css
在项目中只有一个根组件,在index.html中有一个全局的挂载点,渲染的组件会在App.vue中加载,App.vue中提供视图占位符,渲染App.vue,渲染的结果挂载到index.html中的挂载点,在页面显示(项目显示的就是App.vue组件中的占位符对应的组件)
渲染页面:使用App.vue中组件占位符实现页面组件的渲染
Vue服务器根据浏览器发送的url连接请求,首先进入router(路由)组件根据路径映射匹配到的组件,然后去渲染组件,将映射的组件去替换App.vue中设置的页面组件占位符,最终页面显示匹配的组件
eg: 请求路径 /user ===> 首先渲染组件User.vue===>替换App.vue中的<router-view/>
.vue文件说明
- vue文件就是一个组件: html、css、js
- html标签由template标签提供:有且只有一个根标签
- CSS由style标签管理: style标签添加scope属性,保证样式只在该组件内部其作用(样式组件化)
- Js由script标签管理: 内部书写的就是组件new Vue({})中在{}编写的语法,但是需要导出export default
vue使用
@ 符号
路由表规则
页面<a>标签
链接重定向
v-for循环产生多个标签
页面跳转实现
图片静态文件渲染
组件生命周期钩子函数
- 一个组件会在页面中渲染,也会销毁存放到内存中不在页面渲染(从一个页面跳转到另一个页面则销毁),就是一个组件的加载和销毁组件
- 从加载一个组件到销毁一个组件,整个的生命周期中勋在很多特殊的时间节点(组件要创建了,创建成功了,要加载了,加载成功了,要更新数据了,数据更新完毕了,组件要销毁了,销毁成功了),这些特殊的时间节点,vue都提供了对应的回调方法,来辅助完成这些时间节点完成的业务逻辑
- 生命周期钩子函数书写的位置:钩子函数直接作为vue实例的成员
- 注意:钩子函数的书写位置,,每个钩子节点钩子函数的特性都在那个时间段触发

Vue 项目中应用的更多相关文章
- vue 项目中实用的小技巧
# 在Vue 项目中引入Bootstrap 有时在vue项目中会根据需求引入Bootstrap,而Bootstrap又是依赖于jQuery的,在使用npm按照时,可能会出现一系列的错误 1.安装jQu ...
- 如何在VUE项目中添加ESLint
如何在VUE项目中添加ESLint 1. 首先在项目的根目录下 新建 .eslintrc.js文件,其配置规则可以如下:(自己小整理了一份),所有的代码如下: // https://eslint.or ...
- 在vue项目中, mock数据
1. 在根目录下创建 test 目录, 用来存放模拟的 json 数据, 在 test 目录下创建模拟的数据 data.json 文件 2.在build目录下的 dev-server.js的文件作如下 ...
- 浅谈 Axios 在 Vue 项目中的使用
介绍 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 特性 它主要有如下特性: 浏览器端发起XMLHttpRequests请求 Node端发起http ...
- 去除vue项目中的#及其ie9兼容性
一.如何去除vue项目中访问地址的# vue2中在路由配置中添加mode(vue-cli创建的项目在src/router/index.js) export default new Router({ m ...
- vue 项目中当访问路由不存在的时候默认访问404页面
前言: 在Vue项目中,当访问的页面路由不存在或错误时,页面显示为一片空白.然而,通常我们需要对访问url不存在或者错误的情况下添加默认的404页面,即not found页面. 一般的处理方法是: 在 ...
- vue项目中遇到的那些事。
前言 有好几天没更新文章了.这段实际忙着做了一个vue的项目,从 19 天前开始,到今天刚好 20 天,独立完成. 做vue项目做这个项目一方面能为工作做一些准备,一方面也精进一下技术. 技术栈:vu ...
- scss/less语法以及在vue项目中的使用(转载)
1.scss与less都是css的预处理器,首先我们的明白为什么要用scss与less,因为css只是一种标记语言,其中并没有函数变量之类的,所以当写复杂的样式时必然存在局限性,不灵活,而scss与l ...
- Vue项目中GraphQL入门学习与应用
1.GraphQL是什么,能干什么? 正如官网所说,GraphQL是一种用于API查询的语言.Facebook 的移动应用从 2012 年就开始使用 GraphQL.GraphQL 规范于 2015 ...
- 转:如何在Vue项目中使用vw实现移动端适配
https://www.w3cplus.com/mobile/vw-layout-in-vue.html 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flex ...
随机推荐
- idea自定义快捷鍵
一 生成方法注释 1. File -> Settings... 2. Editor -> Live Templates,点击最右边的+ 3. 依自己情况选择,我这里选择的 Live Te ...
- Sublime Text与LaTeX的结合
1.通过Command Palette安装LaTeXTools 2.通过Command Palette查找LaTeXTools: Reconfigure and migrate settings,回车
- 全面掌握Nginx配置+快速搭建高可用架构 一 Nginx的访问控制
语法 示例 allow 127.0.0.1; deny all; 缺点:局限性 如果通过代理就可以绕过访问限制,限制不准确 解决 1. http_x_forwarded_for 2. 结合geo模块作 ...
- Android进阶——多线程系列之异步任务AsyncTask的使用与源码分析
AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并主线程中更新UI,通过AsyncTask可以更加方便执行后台任务以及在主线程中访问UI ...
- 福州大学2020年春软工实践W班第一次作业
作业描述 这个作业属于哪个课程 福州大学2020年春软工实践W班 这个作业要求在哪里 寒假作业(1/2) 这个作业的目标 建立博客.回顾,我的初心.当下和未来.学习路线 作业正文 福州大学2020年春 ...
- 线段树--线段树【模板1】P3372
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含 ...
- php对象:get_object_vars(), get_parent_class(),is_subclass_of(),interface_exists()
get_object_vars():获得对象的属性,以关联数组形式返回 get_parent_class():获得对象的父类 is_subclass_of():判断对象是否某类(参数2)的子类实例出的 ...
- bitcoin-cli
== Blockchain ==getbestblockhashgetblock "blockhash" ( verbosity ) getblockchaininfogetblo ...
- hdu 3483 矩阵乘法
这个题目上周对抗赛题目,搞了我好久 对数学这种不是很敏感 其实都不是自己想出来的,看其他的资料和博客的推导 还是有点难度的,反正我是推不出来 通过二项式定理的化简 有两个博客写得比较好 http:// ...
- ZOJ- 2562 反素数使用
借用了下东北师大ACM的反素数模版. 本来我是在刷线段树的,有一题碰到了反素数,所以学了一下..有反素数的存在,使得一个x ,使得x的约数个数,在1 到 x的所有数里面,是最大的. 这里面还涉及安叔那 ...