【Vue】基础(生命周期 & 常用指令)

生命周期


一个Vue实例是一个对象,对象就会有生命周期,一个Vue实例会经历下面以下生命周期。

  1. 实例初始化 - 初始化事件 & 生命周期
  2. 创建 - 数据观测(data observer)& 观察事件配置
  3. 挂载 - 视图渲染
  4. 更新 - 若数据发生变更触发重新渲染视图
  5. 销毁 - 组件因为切换或内部调用vm.$destroy()方法

Vue在这个生命周期的几个阶段提供了钩子函数,方便在这个过程添加自己代码做一些处理

  1. 创建前/后 :beforeCreate/created
  2. 挂载前/后 :beforeMount/mounted
  3. 更新前/后 :beforeUpdate/updated
  4. 销毁前/后 :beforeDestroy/destroyed
钩子 $data绑定 $el绑定 渲染页面
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
beforeDestroy
destroyed
验证代码
<template>
  <div id="app">
    <h1 @click='clear'>{{message}}</h1>
    <img alt="Vue logo" src="./assets/logo.png" />
  </div>
</template>
<script>

export default {
  name: "App",
  data() {
    return { message: "Wilson Pan" };
  },
  methods: {
    clear() {
      this.$destroy();
    }
  },
  beforeCreate() {
    console.log("-----beforeCreate start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log(this.$data);
    console.log("-----beforeCreate end------");
  },
  created() {
    console.log("-----created start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log(this.$data);
    console.log("-----created end------");
  },
  beforeMount() {
    console.log("-----beforeMount start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log(this.$el);
    console.log(this.$refs);

    debugger; // eslint-disable-line no-debugger

    console.log("-----beforeMount end------");
  },
  mounted() {
    console.log("-----mounted start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log(this.$el);
    console.log(this.$refs);
    this.message = "Alice";
    console.log("-----mounted end------");
    debugger; // eslint-disable-line no-debugger
  },
  beforeUpdate() {
    console.log("-----beforeUpdate start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log("-----beforeUpdate end------");
    debugger; // eslint-disable-line no-debugger
  },
  updated() {
    console.log("-----updated start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log("-----updated end------");
    debugger; // eslint-disable-line no-debugger
  },
  beforeDestroy() {
    console.log("-----beforeDestroy start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log("-----beforeDestroy end------");
    debugger; // eslint-disable-line no-debugger
  },
  destroyed() {
    console.log("-----destroyed start------");
    console.log("$el : " + this.$el);
    console.log("$data : " + this.$data);
    console.log("-----destroyed end------");
    debugger; // eslint-disable-line no-debugger
  }
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

常用指令


  • v-text
    官方:更新元素的文本textContent
    注意:会对内容进行编译,特殊字符编译成转义字符,保证是文本
<span v-text="message"></span>
<br />
<button v-text="buttonText" />
  • v-html
    官方:更新元素的 innerHTML
    注意:内容按普通 HTML 插入 - 不会作为 Vue 模板进行编译
<span v-html="message"></span>
  • v-show
    官方:根据表达式之真假值,切换元素的 display CSS 属性
    注意:false 还是会创建元素,只是元素的display:none
<h3>v-show</h3>
<span v-show="showText">你看得到我</span>
<span v-show="!showText">你看不到我</span>
  • v-if/v-else-if/v-else
    官方:根据表达式的值的真假来有条件地渲染元素
    注意:false 不会创建元素
<h3>v-if</h3>
<span v-if="showText">你看得到我</span>
<span v-if="!showText">你看不到我</span>
  • v-for
    官方: 基于源数据多次渲染元素或模板块
    注意:必须使用特定语法 alias in expression,为当前遍历的元素提供别名
<h3>v-for</h3>
待学内容
<ul>
    <li v-for="(item, index) in todoList" :key="item.id">{{index+1}} - {{ item.name }}</li>
</ul>
  • v-on
    缩写:@
    官方:绑定事件监听器
<h3>v-on</h3>
<button v-on:click="clickMe">点击事件</button>
<button @click="clickMe">缩写点击</button>
<button @[buttonEvent]="clickMe">动态事件</button>
<button @click.once="clickMe">只触发一次</button>
<button @click.left="clickMe">鼠标左键点击</button>
<button @click.right="clickMe">鼠标右键点击</button>
  • v-bind

缩写::
官方: 动态地绑定一个或多个 attribute,或一个组件 prop 到表达式

<!-- 绑定一个属性 -->
<img v-bind:src="imageSrc">

<!-- 动态 attribute 名 (2.6.0+) -->
<button v-bind:[key]="value"></button>

<!-- 缩写 -->
<img :src="imageSrc">

<!-- 动态 attribute 名缩写 (2.6.0+) -->
<button :[key]="value"></button>

<!-- 内联字符串拼接 -->
<img :src="'/path/to/images/' + fileName">

<!-- class 绑定 -->
<div :class="{ red: isRed }"></div>
<div :class="[classA, classB]"></div>
<div :class="[classA, { classB: isB, classC: isC }]">

<!-- style 绑定 -->
<div :style="{ fontSize: size + 'px' }"></div>
<div :style="[styleObjectA, styleObjectB]"></div>

<!-- 绑定一个有属性的对象 -->
<div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>

<!-- 通过 prop 修饰符绑定 DOM 属性 -->
<div v-bind:text-content.prop="text"></div>

<!-- prop 绑定。“prop”必须在 my-component 中声明。-->
<my-component :prop="someThing"></my-component>

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

推荐阅读更多精彩内容