vue简单笔记

一、小细节

Object.freeze()
会阻止修改现有的属性,也意味着响应系统无法再追踪变化。

例子:

var obj = {foo: 'bar'}

Object.freeze(obj) 

这里的foo将不会动态改变

二、生命周期

beforecreated:el 和 data 并未初始化

created:完成了 data 数据的初始化,el没有

beforeMount:完成了 el 和 data 初始化

mounted :完成挂载

通俗化:

beforecreate : 举个栗子:可以在这加个loading事件

created :在这结束loading,还做一些初始化,实现函数自执行

mounted : 在这发起后端请求,拿回数据,配合路由钩子做一些事情

beforeDestroy: 你确认删除XX吗? destroyed :当前组件已被删除,清空相关内容

三、渲染数据

  • {{}} 会将数据渲染为普通文本

  • v-html指令可以将HTML 代码渲染(v-html='后台数据')

  • 渲染对象

<div v-for="(value, key, index) in object">
  {{ index }}. {{ key }}: {{ value }}
</div>
//其中object是一个对象,放在vue实例对象的data数据中
  • 动态渲染

用 v-for 渲染的动态选项:

<select v-model="selected">
  <option v-for="option in options" v-bind:value="option.value">
    {{ option.text }}
  </option>
</select>
<span>Selected: {{ selected }}</span>
new Vue({
  el: '...',
  data: {
    selected: 'A',
    options: [
      { text: 'One', value: 'A' },
      { text: 'Two', value: 'B' },
      { text: 'Three', value: 'C' }
    ]
  }
})

联动效果:one对应span中显示A

四、事件处理

  • 特殊变量 $event
    在设置时间的时候,可以将这个变量作为参数,在使用这个方法的时候,可以访问原生事件对象(event)

  • 事件修饰符

<!-- .stop  阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>

<!-- .prevent 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>

<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>

<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>

<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即元素自身触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>

<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>

<!-- 点击事件将只会触发一次 -->
<a v-on:click.once="doThis"></a>

<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成  -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<div v-on:scroll.passive="onScroll">...</div>

<!--  .lazy  会在使用change事件时进行数据同步  content在data中先定义-->
<!-- 在input框中输入数据后,当输入框失去焦点后会同步数据 content值改变 -->
<input type="text"  v-model.lazy='content' @change='console.log(content)'>
<span>{{content}}</span>

<!-- v-model.number  自动将用户的输入值转为数值类型 
  type="number"  输入框中只能写数字 写其他的不显示
若没有这个属性,则可以输入汉字;
但若第一个字符是数字,后面的从不是数字的字符开始 不显示-->
<input v-model.number="age" type="number">

<!-- v-model.trim 自动过滤用户输入的首尾空白字符 -->
<input v-model.trim="msg">

注意:
使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用
v-on:click.prevent.self 会阻止所有的点击,而
v-on:click.self.prevent 只会阻止对元素自身的点击。
.passive修饰符会告诉浏览器你不想阻止事件的默认行为,即.prevent修饰符不会起作用

五、组件

1、全局注册

它们在注册之后可以用在任何新创建的 Vue 根实例 (new Vue) 的模板中。

直接引入vue.js的方式,创建组件

1、注册组件

// button-counter 组件的名称,也就是你即将在html中写的标签
// 组件名命名规范:
// 短横线分隔命名 或 驼峰命名都可以,但是在html中写标签时,只可以为短横线分隔
// template 组件即将显示的内容(你写什么就显示什么,可以解析html标签)
// data 就是数据 但是要以函数的方式return出来
Vue.component('button-counter', {  
    data: function () {
      return {
        count: 0
      }
    },
    template: '
        <button v-on:click="count++">You clicked me {{ count }} times.</button>
    '
  });

2、在html中写入标签

// 就是上面组件的名称:必须是短横线分割;一个单词就不用了
<button-counter></button-counter>

3、注意:

  • 组件仅在当前页面使用:在当前页面的js中,vue实例外部 注册组件
  • 组件在很多页面使用:新建一个js文件,注册组件,在需要使用的页面上引入这个js文件

2、局部注册

全局注册所有的组件意味着即便你已经不再使用一个组件了,它仍然会被包含在你最终的构建结果中。这造成了用户下载的 JavaScript 的无谓的增加。
1、注册组件

//这种写法 局部注册的组件在其子组件中不可用:就是ComponentA不能在ComponentB组件中使用
var ComponentA = { /* ... */ }
var ComponentB = { /* ... */ }

//如果想要 ComponentA 在 ComponentB 中可用 使用下面写法
var ComponentA = { /* ... */ }
var ComponentB = {
  components: {
    'component-a': ComponentA
  },
}

//若使用vue框架(webpack搭建的项目)
//ComponentA.vue   以vue结尾的文件,用来存放ComponentA这个组件
import ComponentA from './ComponentA.vue'
export default {
  components: {
    ComponentA
  },
  // ...
}

在vue实例的data中

new Vue({
  el: '#app',
  components: {
    'component-a': ComponentA,
    'component-b': ComponentB
  }
})

2、使用方法同上

六、prop

Prop 类型

总的来说,就是可以有各种数据形式:

//字符串:
props: ['title', 'likes', 'isPublished', 'commentIds', 'author']
//对象:
props: {
  title: String,
  likes: Number,
  isPublished: Boolean,
  commentIds: Array,
  author: Object
}

可以实现父组件向子组件传递数据

栗子:

Vue.component('blog-post', {
  // 在 JavaScript 中是 camelCase 的
  props: ['postTitle'],
  template: '<h3>{{ postTitle }}</h3>'
})
  • 传递静态数据

七、vue 路由跳转传参

  • 不在url上显示
methods: {
    goDetial (api, uniqueSign) {
      this.$router.push({
        name: 'programDetail',//这里的name值是指你在注册路由时,写的属性name的值 如下图
        params: {
          api: api,
          uniqueSign: uniqueSign
        }
      })
    },
  },
image.png

参数接收:在跳转到的路由页面 this.$route.params

  • 在url上显示
goDetial (api, uniqueSign) {
      this.$router.push({
        path: '/v/',  //path就是路由的path
        query: {
          api: api,
          uniqueSign: uniqueSign
        }
      })
    }

参数接收:在跳转到的路由页面 获取url参数即可

注意:这边实现的是点击之后跳转 没有用router-link;使用如下:

<router-link :to=" {  name:'programDetail',params:{api:item.api}}"></router-link>

八、简单问题

1、去除路由跳转url后面默认的

image.png

在index.js文件中实例化路由时,添加mode属性 mode: 'history',
image.png

2、解决页面跳转之后当前页面依旧保持原页面的可视区域,不能从当前页面的顶部开始预览

在index.js文件中实例化路由时,添加方法 scrollBehavior 图片如上图,代码如下:

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

推荐阅读更多精彩内容

  • 我的外婆属牛,今年94虚岁,生活在农村,与小舅舅一起生活。 一直想写写外婆,但是不知如何下笔。外婆很...
    杜鹃姐姐阅读 550评论 12 13
  • 积雪在碳中燃烧, 手臂像干枯的柴。 候鸟去南方过冬, 流浪者思归故乡。 突然怀念暴躁的青春, 狂傲的头颅高高地抬起...
    诗人天山暮雪阅读 231评论 0 1
  • 柳浪清波摇古磬,暮雨轻笼,几缕春风咏。水榭朱楼花满径。檐边对对家燕行。 缓步轻移亭下迎,媚眼回眸,霞染芊芊颈。几度...
    絮飞儿阅读 230评论 0 5