Vue使用

一、vue生命周期

  1. # main.js
  2. import Vue from 'vue'
  3. import App from './App.vue'
  4. import router from './router'
  5. import store from './store'
  6. Vue.config.productionTip = false
  7. new Vue({
  8. el: '#app',
  9. router,
  10. store,
  11. "render: function (readFn) {
  12. return readFn(App);
  13. },
  14. })
  15. # App.vue
  16. <template>
  17. <div id="app">
  18. <!--
  19. 提供一个视图组件占位符,占位符被views下的视图组件替换,
  20. 浏览器就显示页面就是哪一个组件
  21. -->
  22. <router-view/>
  23. <router-view/>
  24. <router-view/>
  25. </div>
  26. </template>
  27. # router-->index.js
  28. 路由脚本文件(配置路由url链接与页面组件的映射关系)
  29. # views(文件夹)
  30. 页面组件

总结:

  1. main.js是vue项目的入口文件,在main.js中加载vue、router(路由)、store(仓库)等配置以及加载自定义配置的js、css,第三方js、css

  2. 在项目中只有一个根组件,在index.html中有一个全局的挂载点,渲染的组件会在App.vue中加载,App.vue中提供视图占位符,渲染App.vue,渲染的结果挂载到index.html中的挂载点,在页面显示(项目显示的就是App.vue组件中的占位符对应的组件)

  3. 渲染页面:使用App.vue中组件占位符实现页面组件的渲染

  4. Vue服务器根据浏览器发送的url连接请求,首先进入router(路由)组件根据路径映射匹配到的组件,然后去渲染组件,将映射的组件去替换App.vue中设置的页面组件占位符,最终页面显示匹配的组件

    1. eg 请求路径 /user ===> 首先渲染组件User.vue===>替换App.vue中的<router-view/>

二、.vue文件说明

  1. vue文件就是一个组件: html、css、js
  2. html标签由template标签提供:有且只有一个根标签
  3. CSS由style标签管理: style标签添加scope属性,保证样式只在该组件内部其作用(样式组件化)
  4. Js由script标签管理: 内部书写的就是组件new Vue({})中在{}编写的语法,但是需要导出export default

三、 vue使用

1.@ 符号

  1. @:代表 /src 也就是src项目绝对路径, @src,src可以省略,eg:'@/views/User'=>src/views/user

2.路由表规则

  1. # 注册页面组件,与url路径形成映射关系
  2. import User from '@/views/User'
  3. const routes = [
  4. {
  5. path: '/user', // url请求链接
  6. name: 'user',
  7. component: User // 对应的组件
  8. }
  9. ];

3.页面<a>标签

页面跳转不使用a标签使用router-link进行跳转,a标签跳转会页面刷新,而router-link则不会

  1. <router-link to="/user">用户</router-link>
  2. /*router-link渲染的a激活时的状态, 在浏览器中可以看到*/
  3. a.router-link-exact-active {
  4. color: royalblue;
  5. }

使用小组件:

  1. 首先导入组件

    • import Nav from '../components/Nav' ,其中Nav名字可以随意
  2. 注册小组件,components
  3. 使用组件 template标签中使用<Nav/>

4.链接重定向

在路由层进行配置重定向

  1. const routes = [
  2. {
  3. path: '/',
  4. name: 'home',
  5. component: Home
  6. },
  7. // url映射不存在映射到主页
  8. {
  9. path: '/index',
  10. redirect: '/'
  11. },
  12. ];
  13. window.console.log(this.$router); // $router管理路由跳转的
  14. window.console.log(this.$route); // $route管理路由数据的

5.v-for循环产生多个标签

<Book v-for="books"></Book>:v-for循环产生多个标签会报错, 因为产生多条数据有可能下面多条数据将上面数据覆盖掉

解决: key的值必须唯一

  1. <!-- key属性是为标签建立缓存的标识,不能重复,且在循环组件下,必须设置 -->
  2. <Book v-for="book in books" :key="book.title" />

6.页面跳转实现

  1. 直接使用router-link标签,写入要跳转的路径

    1. <router-link to="/book/detail/">{{ book.title }}</router-link>
  2. 通过点击事件实现页面跳转,路由逻辑跳转

    1. <h2 @click="goDetail">{{ book.title }}</h2>
    2. methods:{
    3. goDetail(){
    4. # 路由逻辑跳转(push历史记录的跳转)
    5. this.$router.push('/book/detail')
    6. }
    7. }
  3. 根据router路由中的name跳转

    1. <h2 @click="goDetail">{{ book.title }}</h2>
    2. methods:{
    3. goDetail(){
    4. # 路由逻辑跳转(push历史记录的跳转)
    5. this.$router.push(
    6. {
    7. name: 'book-detail',
    8. params: {pk: id} // 携带参数
    9. }
    10. )
    11. }
    12. }
  4. go跳转

    1. // go的参数是正负整数,代表历史记录前进或后退几步
    2. this.$router.go(-1); // go(2)
  5. 有名分组

    1. # 有名分组
    2. path: '/book/detail/:pk',
    3. path: '/book/detail/:pk/:acit',
    4. path: '/book/:pk/detail',
    5. # 方式一
    6. this.$router.push(
    7. {
    8. name: 'book-detail',
    9. params: {pk: id}
    10. }
    11. )
    12. # 方式二
    13. this.$router.push(`/book/detail/${id}`)
    14. # 方式三
    15. <router-link :to="'/book/detail/'+book.id">{{ book.title }}</router-link>
    16. # 方式四
    17. <router-link :to="{name: 'book-detail', params: {pk: book.id}}">{{ book.title }}</router-link>
    18. 获取有名分组数据
    19. created() {
    20. // 获取跳转到详情页的当前书本id,再根据id获得书本的详细信息
    21. // window.console.log(this.$router); // $router管理路由跳转的
    22. // window.console.log(this.$route); // $route管理路由数据的
    23. let pk = this.$route.params.pk;
    24. if (!(pk in books_detail)) {
    25. this.$router.go(-1); // 数据不存在,返回
    26. },

7.图片静态文件渲染

  1. # 1. img访问图片路径
  2. <!-- 资源的加载绝对路径才可以访问到资源 -->相对路径则不能访问到资源
  3. <img class="../assets/img/1.jpg" :src="book.img" alt="">
  4. # 2. require
  5. <!-- 前台自己提供的静态资源,在传输后再使用(组件间交互),要才有require函数来加载资源 -->
  6. let img1 = require('../assets/img/西游记.jpg');

四、组件生命周期钩子函数

组件生命周期钩子函数

  1. 一个组件会在页面中渲染,也会销毁存放到内存中不在页面渲染(从一个页面跳转到另一个页面则销毁),就是一个组件的加载和销毁组件
  2. 从加载一个组件到销毁一个组件,整个的生命周期中勋在很多特殊的时间节点(组件要创建了,创建成功了,要加载了,加载成功了,要更新数据了,数据更新完毕了,组件要销毁了,销毁成功了),这些特殊的时间节点,vue都提供了对应的回调方法,来辅助完成这些时间节点完成的业务逻辑
  3. 生命周期钩子函数书写的位置:钩子函数直接作为vue实例的成员
  4. 注意:钩子函数的书写位置,,每个钩子节点钩子函数的特性都在那个时间段触发
  1. export default {
  2. name: "BookDetail",
  3. data() {
  4. return {
  5. num: 10,
  6. book: {}
  7. }
  8. },
  9. // 创建组件获取不到任何数据
  10. beforeCreate() {
  11. window.console.log('该组件要被创建了');
  12. window.console.log(this.num);
  13. },
  14. // 最常用的钩子函数:组件加载后,可以请求后台数据,更新组件数据;组件间路由传参的值获取
  15. created() {
  16. window.console.log('该组件已经创建了');
  17. window.console.log(this.num);
  18. // 获取跳转到详情页的当前书本id,再根据id获得书本的详细信息
  19. // window.console.log(this.$router); // $router管理路由跳转的
  20. // window.console.log(this.$route); // $route管理路由数据的
  21. let pk = this.$route.params.pk;
  22. // window.console.log(pk in {'1': 100, '2': 200});
  23. if (!(pk in books_detail)) {
  24. this.$router.go(-1); // 数据不存在,返回
  25. }
  26. this.book = books_detail[pk];
  27. },
  28. // 当前页面跳转到另一个页面
  29. destroyed() {
  30. window.console.log('该组件已经销毁了')
  31. }
  32. }

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 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

五、总结

  1. 生命周期

    1. main.js是vue项目的入口文件,在main.js中加载vue、router(路由)、store(仓库)等配置以及加载自定义配置的js、css,第三方js、css

    2. 在项目中只有一个根组件,在index.html中有一个全局的挂载点,渲染的组件会在App.vue中加载,App.vue中提供视图占位符,渲染App.vue,渲染的结果挂载到index.html中的挂载点,在页面显示(项目显示的就是App.vue组件中的占位符对应的组件)

    3. 渲染页面:使用App.vue中组件占位符实现页面组件的渲染

    4. Vue服务器根据浏览器发送的url连接请求,首先进入router(路由)组件根据路径映射匹配到的组件,然后去渲染组件,将映射的组件去替换App.vue中设置的页面组件占位符,最终页面显示匹配的组件

      1. eg 请求路径 /user ===> 首先渲染组件User.vue===>替换App.vue中的<router-view/>
  2. .vue文件说明

    1. vue文件就是一个组件: html、css、js
    2. html标签由template标签提供:有且只有一个根标签
    3. CSS由style标签管理: style标签添加scope属性,保证样式只在该组件内部其作用(样式组件化)
    4. Js由script标签管理: 内部书写的就是组件new Vue({})中在{}编写的语法,但是需要导出export default
  3. vue使用

  4. @ 符号

  5. 路由表规则

  6. 页面<a>标签

  7. 链接重定向

  8. v-for循环产生多个标签

  9. 页面跳转实现

  10. 图片静态文件渲染

  11. 组件生命周期钩子函数

    1. 一个组件会在页面中渲染,也会销毁存放到内存中不在页面渲染(从一个页面跳转到另一个页面则销毁),就是一个组件的加载和销毁组件
    2. 从加载一个组件到销毁一个组件,整个的生命周期中勋在很多特殊的时间节点(组件要创建了,创建成功了,要加载了,加载成功了,要更新数据了,数据更新完毕了,组件要销毁了,销毁成功了),这些特殊的时间节点,vue都提供了对应的回调方法,来辅助完成这些时间节点完成的业务逻辑
    3. 生命周期钩子函数书写的位置:钩子函数直接作为vue实例的成员
    4. 注意:钩子函数的书写位置,,每个钩子节点钩子函数的特性都在那个时间段触发

Vue 项目中应用的更多相关文章

  1. vue 项目中实用的小技巧

    # 在Vue 项目中引入Bootstrap 有时在vue项目中会根据需求引入Bootstrap,而Bootstrap又是依赖于jQuery的,在使用npm按照时,可能会出现一系列的错误 1.安装jQu ...

  2. 如何在VUE项目中添加ESLint

    如何在VUE项目中添加ESLint 1. 首先在项目的根目录下 新建 .eslintrc.js文件,其配置规则可以如下:(自己小整理了一份),所有的代码如下: // https://eslint.or ...

  3. 在vue项目中, mock数据

    1. 在根目录下创建 test 目录, 用来存放模拟的 json 数据, 在 test 目录下创建模拟的数据 data.json 文件 2.在build目录下的 dev-server.js的文件作如下 ...

  4. 浅谈 Axios 在 Vue 项目中的使用

    介绍 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 特性 它主要有如下特性: 浏览器端发起XMLHttpRequests请求 Node端发起http ...

  5. 去除vue项目中的#及其ie9兼容性

    一.如何去除vue项目中访问地址的# vue2中在路由配置中添加mode(vue-cli创建的项目在src/router/index.js) export default new Router({ m ...

  6. vue 项目中当访问路由不存在的时候默认访问404页面

    前言: 在Vue项目中,当访问的页面路由不存在或错误时,页面显示为一片空白.然而,通常我们需要对访问url不存在或者错误的情况下添加默认的404页面,即not found页面. 一般的处理方法是: 在 ...

  7. vue项目中遇到的那些事。

    前言 有好几天没更新文章了.这段实际忙着做了一个vue的项目,从 19 天前开始,到今天刚好 20 天,独立完成. 做vue项目做这个项目一方面能为工作做一些准备,一方面也精进一下技术. 技术栈:vu ...

  8. scss/less语法以及在vue项目中的使用(转载)

    1.scss与less都是css的预处理器,首先我们的明白为什么要用scss与less,因为css只是一种标记语言,其中并没有函数变量之类的,所以当写复杂的样式时必然存在局限性,不灵活,而scss与l ...

  9. Vue项目中GraphQL入门学习与应用

    1.GraphQL是什么,能干什么? 正如官网所说,GraphQL是一种用于API查询的语言.Facebook 的移动应用从 2012 年就开始使用 GraphQL.GraphQL 规范于 2015 ...

  10. 转:如何在Vue项目中使用vw实现移动端适配

    https://www.w3cplus.com/mobile/vw-layout-in-vue.html 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flex ...

随机推荐

  1. mysql视图使用方法

    1.为什么要使用视图 对于复杂的查询,往往是有多个数据表进行关联查询而得到,而这种语句往往比较复杂,也可能非常频繁的使用.比如: select 字段一,字段二.字段三, from 数据表1 join ...

  2. 正则表达式入门(ed模糊匹配)

    元字符: /b 代表着单词的开头或结尾,也就是单词的分界处.如果要精确地查找hi这个单词的话,我们应该使用/bhi/b. .是另一个元字符,匹配除了换行符以外的任意字符,*同样是元字符,它指定*前边的 ...

  3. BZOJ:1878: [SDOI2009]HH的项链

    题解:解法一:莫队 解法二:按区间左端点排序,让区间内最左边的贝壳对答案产生贡献,树状数组维护,转移对答案产生贡献的贝壳位置 #include<iostream> #include< ...

  4. java课程之团队开发冲刺阶段2.8

    昨日总结: 1.具体情况已经写在了昨天的当日总结当中 遇到的问题: 1.toolbar的返回键与菜单键冲突,导致无法同时使用 今天的任务: 1.完整实现课程查询任务 当日总结: 1.完整实现,唯一的遗 ...

  5. C语言-逃逸字符、类型转换和布尔类型

    C语言-逃逸字符 逃逸字符是用来表达无法印出来的控制字符或者特殊字符,它由一个反斜杠""开头,后面跟上另一个字符,这两个字符合起来,组成一个字符. \b是backspace,在su ...

  6. JS下拉框联动

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. swift中利用系统线程实现异步加载数据同步更新UI

    swift中的使用案例样式 // Mark: -数据源更新 typealias AddDataBlock = () ->Void var updataBlock:AddDataBlock? fu ...

  8. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring DI(依赖注入)的实现方式属性注入和构造注入

    依赖注入(Dependency Injection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念. 当某个 Java 实例需要另一个 Java 实例时,传统的方法是由调用者创建被调用者的 ...

  9. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:第一个Spring程序

    1. 创建项目 在 MyEclipse 中创建 Web 项目 springDemo01,将 Spring 框架所需的 JAR 包复制到项目的 lib 目录中,并将添加到类路径下,添加后的项目如图 2. ...

  10. swtich多个case使用同一操作

    switch (expression) { case 'status01': case 'status02': case 'status03': alert('resultOne'); break; ...