重写cnodejs学习整理

对练习过程中遇到的疑惑和问题,进行归纳和总结



vue 2.8.1



一、遇到问题

1.scss引入

  在最新的cli脚手架中,scss被默认处理,不需要专门在webpack.base.conf.js中对scss进行规则设置。

2.exports is not define

  在练习中,通过exports导出接口的时候,控制台报错exports is not define,此时可以尝试通过export XXX导出,或者通过npm安装babel-preset-es2015,在.babel文件中

"presets": [
    ["env", { "modules": false }],
    "es2015",
    "stage-2"
  ],

设置依赖,实现代码规范之间的转换。更多详见:https://cnodejs.org/topic/56460e0d89b4b49902e7fbd3

二、 知识点整理

1.vue-router

(1) v-link

v-link有三种用法:

//route.js
export default new Router({
    routes:[{
        path : ‘/home/:id‘,
        name : ‘detail‘,
        component : resolve => require([‘./components/home.vue‘],resolve)
    }]

//index.html
<!-- 字面量路径 -->
<a v-link="‘home‘">Home</a>

<!-- 效果同上 -->
<a v-link="{ path: ‘home‘ }">Home</a>

<!-- 具名路径 -->
<a v-link="{ name: ‘detail‘, params: {id: ‘01‘} }">Home</a> 

v-link 会自动设置 <a> 的 href 属性,你无需使用href来处理浏览器的调整,原因如下:

  • 它在 HTML5 history 模式和 hash 模式下的工作方式相同,所以如果你决定改变模式,或者 IE9 浏览器退化为 hash 模式时,都不需要做任何改变。
  • 在 HTML5 history 模式下,v-link 会监听点击事件,防止浏览器尝试重新加载页面。
  • 在 HTML5 history 模式下使用 root 选项时,不需要在 v-link 的 URL 中包含 root 路径。

(2) 路由对象this.$route

在使用了 vue-router 的应用中,路由对象会被注入每个组件中,赋值为 this.$route ,并且当路由切换时,路由对象会被更新。

路由对象暴露了以下属性:

    • $route.path 
      字符串,等于当前路由对象的路径,会被解析为绝对路径,如 "/home/news" 。
    • $route.params 
      对象,包含路由中的动态片段和全匹配片段的键值对
    • $route.query 
      对象,包含路由中查询参数的键值对。例如,对于 /home/news/detail/01?favorite=yes ,会得到$route.query.favorite == ‘yes‘ 。
    • $route.router 
      路由规则所属的路由器(以及其所属的组件)。
    • $route.matched 
      数组,包含当前匹配的路径中所包含的所有片段所对应的配置参数对象。
    • $route.name 
      当前路径的名字,如果没有使用具名路径,则名字为空。

$router.matched属性,它是一个包含性的匹配,它会将嵌套它的父路由都匹配出来。

例如,/home/news/detail/:id这条路径,它包含3条匹配的路由:

  1. /home/news/detail/:id
  2. /home/news
  3. /home

详见:http://www.cnblogs.com/avon/p/5943008.html

(3) 切割流水线(钩子函数)

$route可以在子组件任何地方调用,代表当前路由对象,这个属性是只读的,里面的属性是 immutable(不可变) 的,不过你可以 watch(监测变化) 它。

全局钩子函数:beforeEach   afterEach

组件内钩子函数:beforeRouteEnter beforeRouteLeave  watch函数

以登录验证为例,使用全局钩子函数beforeEach(before each意思是在 每次每一个路由改变的时候都得执行一遍)

 1 import Vue from ‘vue‘
 2 import Router from ‘vue-router‘
 3
 4 Vue.use(Router)
 5
 6 const router = new Router({
 7  routes: [
 8  {
 9   path: ‘/‘,
10   /*
11   * 按需加载
12   */
13   component: (resolve) => {
14   require([‘../components/Home‘], resolve)
15   }
16  }, {
17   path: ‘/record‘,
18   name: ‘record‘,
19   component: (resolve) => {
20   require([‘../components/Record‘], resolve)
21   }
22  }, {
23   path: ‘/Register‘,
24   name: ‘Register‘,
25   component: (resolve) => {
26   require([‘../components/Register‘], resolve)
27   }
28  }, {
29   path: ‘/Luck‘,
30   name: ‘Luck‘,
31   // 需要登录才能进入的页面可以增加一个meta属性
32   meta: {
33   requireAuth: true
34   },
35   component: (resolve) => {
36   require([‘../components/luck28/Luck‘], resolve)
37   }
38  }
39  ]
40 })
41 // 判断是否需要登录权限 以及是否登录
42 router.beforeEach((to, from, next) => {
43  if (to.matched.some(res => res.meta.requireAuth)) {// 判断是否需要登录权限
44  if (localStorage.getItem(‘username‘)) {// 判断是否登录
45   next()
46  } else {// 没登录则跳转到登录界面
47   next({
48   path: ‘/Register‘,
49   query: {redirect: to.fullPath}
50   })
51  }
52  } else {
53  next()
54  }
55 })
56
57 export default router
58
59 //res => res.meta.requireAuth
60 //function(res){
61 //    return res.meta.requireAuth;
62 //}

对是否登录验证

它的三个参数:

  • to: (Route路由对象)  即将要进入的目标 路由对象       to对象下面的属性: path   params  query   hash   fullPath    matched   name
  • from: (Route路由对象)  当前导航正要离开的路由
  • next: (Function函数)   一定要调用该方法来 resolve 这个钩子。  调用方法:next(参数或者空)  必须调用

    next(无参数的时候):  进行管道中的下一个钩子,如果走到最后一个钩子函数,那么  导航的状态就是 confirmed (确认的)

    next(‘/‘) 或者 next({ path: ‘/‘ })跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。

全局钩子函数 afterEach:after 钩子没有 next 方法,不能改变导航,代表已经确定好了导航怎么去执行后,附带的一个执行钩子函数

组件内钩子函数 beforeRouteEnter beforeRouteLeave  watch,以项目https://github.com/shinygang/Vue-cnodejs中组件list.vue为例

 1 ...
 2 beforeRouteLeave(to,from,next){
 3             //如果跳转到详情页,记录重要数据
 4             //方便从详情页返回到该页面的时候继续加载之前位置的数据
 5             if(to.name === ‘topic‘){
 6                 //当前滚动条位置
 7                 window.window.sessionStorage.scrollTop = $(window).scrollTop();
 8                 //当前页面主题数据
 9                 window.window.sessionStorage.topics = JSON.stringify(this.topics);
10                 //查询参数
11                 window.window.sessionStorage.searchKey = JSON.stringify(this.searchKey);
12                 //当前tab   from.query.tab有值则赋值否则赋值‘all‘
13                 window.window.sessionStorage.tab = from.query.tab || ‘all‘
14             }
15             $(window).off(‘scroll‘);
16             next();
17         },
18         beforeRouteEnter(to,from,next){
19             if(from.name !== ‘topic‘){
20                 //页面切换移除之前记录的数据集
21                 window.window.sessionStorage.removeItem(‘topics‘);
22                 window.window.sessionStorage.removeItem(‘searchKey‘);
23                 window.window.sessionStorage.removeItem(‘tab‘);
24             }
25             next();
26         },
27 ...
28 watch : {
29             //切换页面
30             ‘$route‘ (to,from){
31                 //如果是当前页面切换分类的情况
32                 if(to.query && to.query.tab){
33                     this.searchKey.tab = to.query.tab;
34                     this.topics = [];
35                     this.index = {};
36                 }
37                 this.searchKey.page = 1;
38                 this.getTopics();
39                 //隐藏导航栏
40                 this.$refs.head.show = false;
41             }
42         },
43 ...

复用组件时,想对路由参数的变化作出响应的话,你可以简单地 watch(监测变化) $route 对象:

const User = {
  template: ‘...‘,
  1、watch: {
    ‘$route‘ (to, from) {
      // 对路由变化作出响应...
    }
  }
 2、watch: {
   ‘$route‘: ‘fetchData‘    // 如果路由有变化,会再次执行fetchData方法
  },

详见:http://www.cnblogs.com/faith3/p/6224235.html

2. vuex (详见:http://blog.csdn.net/sinat_29412671/article/details/53635897

(1) mapGetters辅助函数

mapGetters 辅助函数仅仅是将 store 中的 getters 映射到局部计算属性:

import { mapGetters } from ‘vuex‘

export default {
  // ...
  computed: {
  // 使用对象展开运算符将 getters 混入 computed 对象中
    ...mapGetters([
      ‘doneTodosCount‘,
      ‘anotherGetter‘,
 // 映射 this.doneCount 为 store.getters.doneTodosCount
      doneCount: ‘doneTodosCount‘
      // ...
    ])
  }
}

3. vue自定义属性或方法

//demo.js
import Vue from ‘vue‘

export default{
    install(){
        Vue.prototype.$myName = "hello";
        Vue.prototype.checkUserName = (value) => {
            if(/\w{6,20}/.test(value)){
                return true;
            }else{
                return false;
            }
        }
  }
}

//main.js
import demo from ‘demo.js‘

Vue.use(demo);

//index.js
mounted(){
            alert(this.$myName);
            alert(this.checkUserName(‘hello‘));
}

详见:http://blog.csdn.net/github_26672553/article/details/53046923

时间: 2024-10-04 15:15:30

重写cnodejs学习整理的相关文章

2019.09.09学习整理

2019.09.09学习整理 基于socket套接字的UDP协议 UDP套接字示例 客户端 import socket cli = socket.socket(type=socket.SOCK_DGRAM) while True: msg = input('>>:').strip() cli.sendto(msg.encode('utf-8'), ('127.0.0.1', 8003)) data,ser_addr=cli.recvfrom(1024) cli.close() 服务端 impo

ijwmh1-2-以前学习整理出来的学习内容--什么是变量1整型变量

崧闱旭 ijwmh1-2-以前学习整理出来的学习内容--什么是变量1整型变量

java中反射学习整理

转载请注明:http://blog.csdn.net/j903829182/article/details/38405735 反射主要是指程序可以访问,检测和修改它本身的状态或行为的一种能力. java中反射是一种强大的工具,它能够创建灵活的代码,这些代码可以在运行时装载,无须在组件之间进行链接.反射允许在编写与执行时,使程序能够接入到jvm中的类的内部信息,而不是源代码中选定的类协作的代码.这使反射成为构建灵活应用代码的主要工具.需要注意的是,如果使用不当,反射的成本会很高. package

AJAX学习整理二之简单实例

做了几个简单的实例,加载txt文本内容.加载xml文件内容,把xml文本内容转换成html表格显示.废话不多说,直接贴代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/html"> <head>     <title>通过ajax获取文本内容</title>     <meta charset="utf-8">     <scr

java密码学学习整理--对称加密(着重描述3des)

1.对称加密要点 对称加密算法的核心是加密和解密操作使用同一套密钥.加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要.因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题. 2.des(参考自:http://baike.baidu.com/view/878529.htm?from_id=210508&type=syn&fromtitle=DES&fr=aladdin) DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位(每组的

2017年 1月 15日 指针 学习整理

有关指针的概念: 指针是一个特殊的变量,它里面存储的数值被解释为内存里的一个地址. FIrst of all:我们需要明确目标 关于指针的学习以及使用我们需要搞清楚有关指针的四个内容:指针的类型,指针所指向的类型,指针的值(或者说叫指针所指向的内存区),还有指针本身所占用的内存区(指针也是一个特殊的变量吗,它肯定也是占据内存的).接下来让我们分别进行学习. 我们先来申明几个指针的例子: 1 int *ptr; 2 char *ptr; 3 int **ptr; 4 int (*ptr)[3];

TweenMax学习整理--特有属性

TweenMax学习整理--特有属性 构造函数:TweenMax(target:Object, duration:Number, vars:Object) target:Object -- 需要缓动的对象 duration:Number -- 缓动持续时间 vars:Object -- 其它参数(特有属性29个,插件17个,公共属性10个,公共方法20个) TweenMax提供的方法大多都会返回一个TweenMax Object实例 [特有属性(29个)] 这29个参数可以直接传入第三个obje

linux学习 整理(1)

ls目录文件 uname 现实当前系统信息 clear 清理 history 历史记录 ctrl + R 搜索历史记录 ESC按完之后按. 补齐上次参数 切换root用户 su - 使用管理员权限运行命令 sudo 现实当前用户信息 id 修改当前用户密码 passwd 命令 + & 在后台运行进程 jobs查看后台作业 ctrl + Z 暂停某个程序 bg 控制进程继续在后台运行 fg 控制进程在前台运行 ctrl + C 结束当前命令 linux学习 整理(1),布布扣,bubuko.com

锋利jQuery 学习整理之 第六章 jQuery 与Ajax 的应用

1.Ajax 的XMLHttpRequest 对象 XMLHttpRequest 是Ajax 的核心,它是Ajax 实现的关键---发送异步请求.接受响应及执行回调都是通过它来完成的.XMLHttpRequest最早是在Microsoft Internet Explorer  5.0  ActiveX 组件中被引用的. 2.JQuery 中的Ajax jQuery 对Ajax 进行了封装,在jQuery中$.ajax()方法属于最底层的方法,第二层是load().$.load()和$.post(