vue.js 核心知识点一

- 1.1 对于Vue是一套渐进式框架的理解

[主张最少,Vue可以根据开发者的实际需求来不断渐进,而不是一口气全部用上]
[搭积木,我们可以根据需求,利用社区良好的生态,借助已有的工具和库搭建我们的项目,用最小、最快的成本一步步搭建。]
先看到核心的部分(最小集),或者说是 Vue 这个名字的“初衷”: View,然后在此基础上进行开发者自身的 DIY 扩展,也就是按需采用。这个过程是随着开发者的需求逐步变化增长的,由简单到复杂的应用场景都可以涵盖到

- 1.2 vue几种常用的指令

  • 1.插入文本: v-text
    相当于元素的innerText属性,必须是双标签
  • 2.插入HMTL: v-html
    相当于元素的innerHTML属性
  • 3.循环: v-for
    如果names是数组,还有index属性,如v-for="(item,index) in names" ;
    如果names是对象,还有value,key属性,如v-for="(value,key,index) in names";
  • 4.双向绑定:v-model
    一般用在表达输入,很轻松的实现表单控件和数据的双向绑定。只能给具备value属性的元素进行双向数据绑定。
  • 5,6,7.条件渲染:v-show,v-if ,v-else
    区别:
    v-if 是“真正的”条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建
    v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
    v-show 就简单得多,是否隐藏元素——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。
    v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件不太可能改变,则使用 v-if 较好。
    v-if直接从代码中删除了,v-show只是通过display来切换状态
  • 8.属性绑定:v-bind
    这个指令用于响应地更新 HTML 特性,比如绑定某个class元素或元素的style样式。
    v-bind:属性名="常量 || 变量名",简写形式——:属性名="常量 || 变量名"
<div v-bind:属性名="变量"></div>
//可以简写成
<div :属性名="变量"></div>
//如果要赋值常量,需要给常量用单引号包起来,如
<div :属性名=" '常量' "></div>
//这样的方式然后绑定动态属性比较常见的有a标签的href,img标签的src。
  • 9.绑定事件:v-on
    用于监听指定元素的DOM事件,比如点击事件。
    v-on:click = "方法名 || 直接改变 vue 内部变量",简写形式——@click = "方法名 || 直接改变 vue 内部变量"
  • 10.v-once
    只渲染元素和组件一次,随后的渲染,使用了此指令的元素/组件及其所有的子节点,都会当作静态内容并跳过,这可以用于优化更新性能,也可以加给点击事件,默认只能点击一次

- 1.3 vue常用的修饰符

  • v-model的修饰符

  v-model 是用于在表单表单元素上创建双向数据绑定的指令。在 <input> 和 <textarea> 上,默认通过监听元素的 input 事件来更新绑定的属性值。

.lazy 延迟了同步更新属性值的时机

var vm =new Vue({
el:"#app",
data: { input_lazy:"" }
});
//在页面中的 input 的元素上添加指令
<div class="row">
<h2>v-model.lazy</h2>
<input type="text" v-model.lazy = "input_lazy"/>
</div>
图片1

当在文本框输入内容,并且光标焦点没有离开文本框时,属性值没有实时发生变化


图片2

而当焦点离开文本框时,属性值发生了变化并与文本框内容保持一致。
从这个例子可以看出 .lazy 修饰符延迟了同步更新属性值的时机。即将原本绑定在 input 事件的同步逻辑转变为绑定在 change 事件上。

   .number 该修饰符用来将输入内容自动转换成数值。

var vm =new Vue({
el:"#app",
data: {input_number:""}
});
<div class="row">
<h2>v-model.number</h2>
<input type="text" v-model.number= "input_number"/>
</div>
图片1

当开始输入数字时,属性值将实时更新成Number类型的数值。数字后输入其他非数字的字符,属性值将不再变化。


图片2

而当开始输入非数字的字符串时,因为Vue无法将字符串转换成数值,所以属性值将实时更新成相同的字符串。即使后面输入数字,也将被视作字符串。

   .trim 该修饰符用来自动过滤字符串前后的空字符。

<div class="row">
<h2>v-model.trim</h2>
<input type="text" v-model.trim= "input_trim"/>
</div>
//Vue会自动过滤掉前后的多个空格,最终属性值是前后没有空字符的字符串。
  • v-on的修饰符

   绑定的事件修饰符可以改变事件的触发方式。
   .stop   该修饰符将阻止事件向上冒泡。 同理于调用 event.stopPropagation() 方法

var vm =new Vue({el:"#app",
methods: {
div_click:function() {
console.log("div click...");
},
stop_click: function() {
console.log("stop_click...");
}
}
});
//将上面两个方法绑定到一组具有父子关系的元素上
div class="row">
<h2>v-on.stop</h2>
<div @click="div_click">
<button type="button" @click.stop="stop_click">StopPropagation</button>
</div>
<hr/>
</div>
图片描述

按照事件冒泡原理,点击按钮时,从当前触发的元素开始,沿着它的父元素一直到根元素,都会依次触发 click 事件。但是应用了 .stop 修饰符后,将只会触发当前元素的 click 事件,并阻止事件向上冒泡。

   .prevent   该修饰符会阻止当前事件的默认行为。同理于调用 event.preventDefault() 方法

var vm =new Vue({el:"#app",
methods: {
form_submit:function() {
console.log("form submit...");
}
});
//
<div class="row">
<h2>v-on.prevent</h2>
<form @submit.prevent="form_submit">
<button type="submit">submit</button>
</form >
<hr/>
</div>

     当点击提交按钮时,会触发绑定的事件,并且阻止表单提交并刷新当前页面的默认行为。

   .self   该指令只当事件是从事件绑定的元素本身触发时才触发回调

<div class="row">
  <h2>v-on.self</h2>
  <div @click.self="div_click" style="display:inline-block; width: px; background-color:red;">
    <button type="button" @click="stop_click">Button</button>
  </div>
  <hr />
</div> 
图片描述

因为父元素比它的子元素要长,所以右侧会有一部分红色的父元素显示出来。分别点击按钮和红色区域,查看控制台打印结果


图片描述

因为 div_click 事件被修饰符绑定,只有在直接点击到父元素 div ,即红色区域内,事件才会被触发。
即使点击了它的子元素触发了子元素的事件,按照事件冒泡原理,父元素的事件应当被触发,但是因为事件的触发源并不是事件绑定的元素本身,所以父元素事件不会被触发。

.once    该修饰符表示绑定的事件只会被触发一次

<div class="row">
  <h2>v-on.once</h2>
  <button type="button" @click.once="once_click">Button</button>
  <hr />
</div>

打开页面,多次点击按钮。只有在第一次点击时,事件才会触发。

  • 键值修饰符 该修饰符可以用来监听键盘事件
var vm = new Vue({
  el: "#app",
  methods: {
    enter_click: function () {
      console.log("enter click...");
    }
  }
});
<div class="row">
  <h2>键值修饰符</h2>
  <input type="text" @keyup.="enter_click" />
  <hr />
</div>

通过 keyup.keyCode 的方式来监听键盘特定按键的事件。也可以通过按键名称来监听

<input type="text" @keyup.enter="enter_click"/>

也可以自定义按键名称

// 自定义按键名称
Vue.config.keyCodes.ent = 13;
 
// 页面引用
<input type="text" @keyup.ent="enter_click"/>

二、使用element组件库的el-input标签,绑定delete键

 <el-input v-model="input" placeholder="请输入内容" @keyup.delete.native="KeyUpDelete"></el-input>

为什么这次绑定事件多一个.native修饰符,这个可能是因为element-ui封装了个div在input标签外面,把原来的事件隐藏了,所以如果不加.native的话,按键不会生效

三、上面两种实现效果是当input标签获取到焦点的时候,才能监听到键盘,下面这种是全局监听enter键,是把监听事件绑定到document上(登录页面常用)

created: function() {
        var _this = this;
        document.onkeydown = function(e) {
            let key = window.event.keyCode;
            if (key == 13) {
                _this.submit();
            }
        };
    },
 methods: {
        submit: function() {
            alert("监听到enter键");
        },
   }

Vue监听键盘,直接用@绑定就可以,而且Vue为几个常用的按键提供了别名,不用去查询按键的keyCode
<input @keyup.enter="function">

delete delete(删除)/BackSpace(退格)
.tab Tab
.enter Enter(回车)
.esc Esc(退出)
.space Space(空格键)
.left Left(左箭头)
.up Up(上箭头)
.right Right(右箭头)
.down Down(下箭头)
.ctrl Ctrl
.alt Alt
.shift Shift
.meta (window系统下是window键,mac下是command键)

组合写法 按键组合
@keyup.alt.67=”function” Alt + C
@click.ctrl=”function” Ctrl + Click

部分引用 https: //www. jianshu.com /p/ 60135bb32ebb

1.4 vue开发中,父组件添加scoped之后。解决在父组件中无法修改子组件样式问题。

在vue的开发中,我们需要引用子组件,包括ui组件(element、iview)。但是在父组件中添加scoped之后,在父组件中书写子组件的样式是无效果的。去掉scoped之后,样式可以覆盖。但这样会污染全局样式,为了解决这个问题,vue-loader新增书写方式。


图片描述

图片描述

图片描述

这样的写法及修改了子组件的样式,又不会污染全局样式!

官网文档:Scoped CSS · vue-loader

Tips:此方式从 vue-loader 11.2.0 开始支持

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

推荐阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,044评论 0 29
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,198评论 0 6
  • 主要还是自己看的,所有内容来自官方文档。 介绍 Vue.js 是什么 Vue (读音 /vjuː/,类似于 vie...
    Leonzai阅读 3,324评论 0 25
  • # 传智播客vue 学习## 1. 什么是 Vue.js* Vue 开发手机 APP 需要借助于 Weex* Vu...
    再见天才阅读 3,525评论 0 6
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 10,989评论 4 129