vue

vue基础

v-if和v-show的区别

  • v-if: 判断是否加载,可以减轻服务器的压力,在需要时加载。
  • v-show:调整css dispaly属性,可以使客户端操作更加流畅。

v-html

v-html谨慎使用,容易被攻击,尤其表单提交不要用,保证页面安全性。

v-model三个修饰符

.lazy:取代 imput 监听 change 事件。
.number:输入字符串转为数字。
.trim:输入去掉首尾空格。

v-bind

v-bind:src="",缩写:src

其他内部指令

v-pre:直接输入原始值,v-cloak:页面都渲染完成后再显示,v-once:只渲染一次,不改变

vue全局变量

全局变量,简单的来说就是在构造器外部用Vue提供给我们的API函数来定义新的功能。

自定义标签v-directive

自定义标签的三个参数

el: 指令所绑定的元素,可以用来直接操作DOM。
binding: 一个对象,包含指令的很多信息。
vnode: Vue编译生成的虚拟节点。

自定义标签的五个生命周期

1.bind:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个绑定时执行一次的初始化动作。
2.inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于document中)。
3.update:被绑定于元素所在的模板更新时调用,而无论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。
4.componentUpdated:被绑定元素所在模板完成一次更新周期时调用。
5.unbind:只调用一次,指令与元素解绑时调用。

bind:function(){//被绑定
     console.log('1 - bind');
},
inserted:function(){//绑定到节点
      console.log('2 - inserted');
},
update:function(){//组件更新
      console.log('3 - update');
},
componentUpdated:function(){//组件更新完成
      console.log('4 - componentUpdated');
},
unbind:function(){//解绑
      console.log('5 - unbind');
}

vue.set

由于Javascript的限制,Vue不能自动检测以下变动的数组。
当你利用索引直接设置一个项时,vue不会为我们自动更新。
当你修改数组的长度时,vue不会为我们自动更新。

vue的生命周期

 beforeCreate:function(){
                console.log('1-beforeCreate 初始化之后');
            },
            created:function(){
                console.log('2-created 创建完成');
            },
            beforeMount:function(){
                console.log('3-beforeMount 挂载之前');
            },
            mounted:function(){
                console.log('4-mounted 被创建');
            },
            beforeUpdate:function(){
                console.log('5-beforeUpdate 数据更新前');
            },
            updated:function(){
                console.log('6-updated 被更新后');
            },
            activated:function(){
                console.log('7-activated');
            },
            deactivated:function(){
                console.log('8-deactivated');
            },
            beforeDestroy:function(){
                console.log('9-beforeDestroy 销毁之前');
            },
            destroyed:function(){
                console.log('10-destroyed 销毁之后')
            }

组件和指令的区别

组件注册的是一个标签,而指令注册的是已有标签里的一个属性。在实际开发中我们还是用组件比较多,指令用的比较少。因为指令看起来封装的没那么好,这只是个人观点。

propsData Option 全局扩展的数据传递

propsData三步解决传值: 1.在全局扩展里加入props进行接收。propsData:{a:1} 2.传递时用propsData进行传递。props:[‘a’] 3.用插值的形式写入模板。
作用:在单页应用中保持状态和数据的。

Mixins一般有两种用途:

1.在你已经写好了构造器后,需要增加方法或者临时的活动时使用的方法,这时用混入会减少源代码的污染。
2.很多地方都会用到的公用方法,用混入的方法可以减少代码量,实现代码重用。

路由

vue-router入门

  1. 第一步,在src/components目录下新建 Hi.vue 文件

  2. 第二步,修改index.js里面路由配置,
    引入 Hi组件:我们在router/index.js文件的上边引入Hi组件,
    增加路由配置:在router/index.js文件的routes[]数组中,新增加一个对象,代码如下。

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import hi from '@/components/hi'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      path: '/hi',
      name: 'hi',
      component: hi
    }
  ]
})

  1. router-link制作导航
    在 src/App.vue文件中的template里加入下面代码,实现导航
<p>导航 :
   <router-link to="/">首页</router-link>
   <router-link to="/hi">Hi页面</router-link>
</p>

vue-router配置子路由

  1. 第一步,建立hi1,hi2页面
  2. 第二步,修改index.js路由配置,
    注意children:与后面内容加空格,children下的path值不能加 ' / ',
    import引入模板,
    代码如下:
export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      path: '/hi',
      name: 'hi',
      component: hi,
      children: [
        {
          path: '/hi',
          name: 'hi',
          component: hi
        },
        {
          path: 'hi1',
          name: 'hi1',
          component: hi1
        },
        {
          path: 'hi2',
          name: 'hi2',
          component: hi2
        }
      ]
    }
  ]
})
  1. 第三步,hi.vue增加代码
<router-view></router-view>
  1. 第四步,app.vue增加代码
<router-link to="/hi/hi1">-Hi页面1</router-link>
<router-link to="/hi/hi2">-Hi页面2</router-link>

vue-router传参

  1. 传递name参数,直接在模板中写
<p>$route.name</p>
  1. 通过标签中的to进行传参,最后在模板里(src/components/Hi1.vue)用$route.params.username进行接收.,语法如下:
<router-link :to="{name:xxx,params:{key:value,key:value}}">valueString</router-link>

name:就是我们在路由配置文件中起的name值。
params:就是我们要传的参数,它也是对象形式,在对象里可以传递多个值。

单页面多路由区域操作

app.vue里面可以有多个<router-view ></router-view>,代表页面内的多个模块,配置路由注意component字段变成components

vue-router 利用url传递参数

:冒号的形式传递参数 我们可以在理由配置文件里以:冒号的形式传递参数,这就是对参数的绑定,:后面是参数的名称,参数名称后面的括号内是正则表达式。 -. 在配置文件里以冒号的形式设置参数。我们在/src/router/index.js文件里配置路由。

{
    path:'/params/:newsId(\\d+)/:newsTitle',
     component:Params
}

在App.vue文件里加入我们的标签。这时候我们可以直接利用url传值了。

<router-link to="/params/198/jspang website is very good">params</router-link> |

在页面中通过插值的形式获取参数值,eg

{{$route.params.newsId}}

重定向

  1. 只要在路由配置文件中(/src/router/index.js)把原来的component换成redirect参数就可以了。我们来看一个简单的配置。
export default new Router({
  routes: [
    {
      path: '/',
      component: Hello
    },{
      path:'/params/:newsId(\\d+)/:newsTitle',
      component:Params
    },{
      path:'/goback',
      redirect:'/'
    }
  ]
})
  1. 重定向时传递参数,我们只需要在ridirect后边的参数里复制重定向路径的path参数就可以了,之后在模板正常接收就可以了
{
  path:'/params/:newsId(\\d+)/:newsTitle',
  component:Params
},{
  path:'/goParams/:newsId(\\d+)/:newsTitle',
  redirect:'/params/:newsId(\\d+)/:newsTitle'
}

alias别名

在index.js文件下给需要的模板起一个别名,

{
    path: '/hi1',
    component: Hi1,
    alias:'/jspang'
 }

起过别名之后,可以直接使用<router-link>标签里的to属性,进行重新定向。
redirect和alias的区别

redirect:仔细观察URL,redirect是直接改变了url的值,把url变成了真实的path路径。
alias:URL路径没有别改变,这种情况更友好,让用户知道自己访问的路径,只是改变了<router-view>中的内容。

注意:别名请不要用在path为’/’中,如下代码的别名是不起作用的。

{
  path: '/',
  component: Hello,
  alias:'/home'
}

路由的过渡动画

需要在<router-view>标签的外部添加<transition>标签,标签还需要一个name属性。

<transition name="fade" mode="out-in">
  <router-view ></router-view>
</transition>

css过渡类名: 组件过渡过程中,会有四个CSS类名进行切换,这四个类名与transition的name属性有关,比如name=”fade”,会有如下四个CSS类名:

fade-enter:进入过渡的开始状态,元素被插入时生效,只应用一帧后立刻删除。
fade-enter-active:进入过渡的结束状态,元素被插入时就生效,在过渡过程完成后移除。
fade-leave:离开过渡的开始状态,元素被删除时触发,只应用一帧后立刻删除。
fade-leave-active:离开过渡的结束状态,元素被删除时生效,离开过渡完成后被删除。

过渡模式mode:

in-out:新元素先进入过渡,完成之后当前元素过渡离开。
out-in:当前元素先进行过渡离开,离开完成后新元素过渡进入。

mode的设置和404页面的处理

1.mode有两个值,可以在index.js下面修改

export default new Router({
    mode: "history",
    routes: [
      {
          path: '/',
          component: HelloWorld
      }
    ]
})

history:像普通url一样,不带#
hash:有#

2.404页面设置
在路由器配置文件index.js下面修改

{
   path:'*',
   component:Error
}

路由中的钩子

有两种写法

  1. 在/src/router/index.js中写,只有一种
{
      path:'/params/:newsId(\\d+)/:newsTitle',
      component:Params,
      beforeEnter:(to,from,next)=>{
        console.log('我进入了params模板');
        console.log(to);
        console.log(from);
        next();
},
  1. 在模板中写
beforeRouteEnter:(to,from,next)=>{
    console.log("准备进入路由模板");
    next();
  },
  beforeRouteLeave: (to, from, next) => {
    console.log("准备离开路由模板");
    next();
  }

三个参数:
to:路由将要跳转的路径信息,信息是包含在对像里边的。
from:路径跳转前的路径信息,也是一个对象的形式。
next:路由的控制参数,常用的有next(true)和next(false)。

编程式导航

<script>
export default {
  name: 'app',
  methods:{
//返回上一级
    goback(){
      this.$router.go(-1);
    },
//下一级
    goGo () {
      this.$router.go(1)
    },
//随便跳转到其他页面,用push('/路径')
  gosuiji () {
      this.$router.push('/error')
    }
  }
}
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容

  • # 传智播客vue 学习## 1. 什么是 Vue.js* Vue 开发手机 APP 需要借助于 Weex* Vu...
    再见天才阅读 3,534评论 0 6
  • 相关概念 混合开发和前后端分离 混合开发(服务器端渲染) 前后端分离后端提供接口,前端开发界面效果(专注于用户的交...
    他爱在黑暗中漫游阅读 2,786评论 4 45
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,207评论 0 6
  • 又是很乱的一天,没有什么可反思的也没有学到什么,晚上和不同的人聊天插科打诨而已,有时候感觉在浪费时间有时候又觉得没...
    知识日记阅读 101评论 0 0
  • 文/ 陈皓 也许你会觉得人生很奇怪 生活中有很多事情你却无法去猜 该走的走,该来的来 在时光的隧道里 任何人都没有...
    沂蒙文学阅读 273评论 5 3