Vue入门

1. 初始化vue

第一步:给Vue准备一个容器:

<divid="app"><!-- 在页面中,通过插值表达式可以直接使用Vue管理的数据。

注意:Vue管理的数据是响应式的,所谓响应式,指的是,当前数据发生改变是,会重新渲染页面。 --><h2>{{name}}</h2><h2>{{age}}</h2></div>

第二步:创建Vue实例:

// 不允许 vue-devtools 检查代码Vue.config.devtools=false// vue 在启动时不显示生产提示Vue.config.productionTip=false// 初始化一个Vue实例,在创建Vue实例时,需要给Vue传递一个配置选项,该配置选项是一个对象letvm=newVue({// el选项,指定当前Vue实例,操作的容器el:'#app',// data选项,用于存储当前Vue实例管理的数据// data选项里面管理的数据,会被添加到Vue实例身上,这里就是vm身上。// data选项里面管理的数据,其实会被Vue实例身上的_data进行代理;并将代理过后的数据再添加到Vue实例身上,方便直接调用。data:{name:'王瑞',age:20}})

2. Vue响应式原理


// 代理对象的基本理解:/* let data = {

    name:'兵哥',

    age:18

}

// 因为对象是引用类型,在传递时,传的是地址

let _data = data;

// 操作_data,真正改变的是data,此时就可以将_data当做是data的代理对象。

_data.name = '王瑞'

_data.age = 30

console.log(data); */console.log('-------------------------------');// 如何给对象添加成员letobj={}// 方式1:对象名.属性的方式,给对象添加成员obj.name='吴亦凡'// 方式2:对象名['属性名']的方式,给对象添加成员obj['age']=30// 方式3:通过Object对象的defineProperty方法,给指定的对象添加指定的属性// 这种方式,给对象添加成员,尽管繁琐,但是可以配置更多的功能。// 默认添加的属性是不允许删除的,如果要允许删除,就需要添加configurable配置。// 默认添加的属性是不允许枚举的,所谓枚举指的就是遍历。Object.defineProperty(obj,'sex',{// 属性值value:'男',// 属性允许被删除configurable:true,// 属性允许被枚举enumerable:true})// 遍历出对象的所有属性名称for(letkeyinobj){console.log(key);}// delete关键字,用于删除对象身上的指定成员deleteobj.namedeleteobj.sexconsole.log(obj);console.log('-------------------------------');// 那么Vue的响应式原理,就用到了Object.defineProperty,给代理对象添加属性。// 01.我们先定义一份原始数据,也就是被代理对象。letdata={name:'兵哥',age:18}// 02.再定义一个空的代理对象let_data={}// 03.使用Object.defineProperty给代理对象添加属性Object.defineProperty(_data,'name',{// get方法,用于返回属性的值,当使用到_data对象里面的name属性获取值时,就会执行get方法get(){returndata.name},// set方法,用于设置属性的值,当使用到_data对象里面的name属性并给它赋值时,就会调用set方法set(val){data.name=val// 当监听到数据发生变化时,重新渲染DOMreaderDOM()}})Object.defineProperty(_data,'age',{get(){returndata.age},set(val){data.age=valreaderDOM()}})// 渲染DOM更新的方法functionreaderDOM(){document.getElementById("name").innerHTML=data.namedocument.getElementById("age").innerHTML=data.age}readerDOM()

3.vue的常用指令

<divid="app"><!-- 在页面中直接显示data里面的数据,可以通过插值表达式 --><h2>{{name}}</h2><!-- 如何让html元素的属性绑定Vue实例管理的数据,通过v-bind:指令。 --><!-- 如何让html元素的事件绑定Vue实例管理的方法,通过v-on:指令。 --><!-- 注意:这里在调用方法时,不能加上(),此时它才会将事件对象作为方法的第一个参数,传给该方法。 --><inputtype="text"v-bind:value="name"v-on:input="setName"><hr><h2>{{address}}</h2><!-- v-bind:的简写是: --><!-- v-on:的简写是@ --><!-- 注意:如果方法的逻辑处理比较简单,可以直接将代码写在行内;这里的$event返回的就是事件对象。 --><inputtype="text":value="address"@input="address=$event.target.value"><hr><h2>{{hobby}}</h2><!-- v-model指令,用于实现对数据的双向绑定,所谓双向绑定,

指的是:数据发生变化重新渲染页面,页面数据发生变化更新回数据。 --><inputtype="text"v-model="hobby"></div>

// 实例化一个Vue对象letvm=newVue({el:'#app',// data选项,可以是一个对象,也可以是一个方法,由方法返回一对象。data(){return{name:'兵哥',address:'南京',hobby:'敲代码'}},// methods选项,里面定义的是Vue管理的方法methods:{// 该方法更新name属性值// 注意:在调用方式时,如果没有传递参数,那么事件方法会默认传一个事件对象参数。setName(e){this.name=e.target.value},},})

4.条件渲染和列表渲染

<divid="app"><!-- 按钮注册点击事件,因为处理的逻辑比较简单,直接将代码写在行内 --><buttonv-on:click="isShow=!isShow">显示/隐藏</button><!-- v-if指令用于条件渲染,表达式返回true,显示元素;否则不显示元素。 --><divclass="box"v-if="isShow">v-if</div><!-- v-show指令也是用于条件渲染,表达式返回true,显示元素;否则不显示元素。 --><divclass="box"v-show="isShow">v-show</div><!-- 注意:v-if的表达式返回false,会生成对应的元素。

v-show的表达式返回true,元素正常生成,通过display样式去控制显示和隐藏。

所以,如果元素需要反复切换显示和隐藏使用v-show;如果只是页面加载是判断是否显示使用v-if。 --><hr><!-- v-if,v-else-if,v-else可以组成多重判断结构。注意:中间不能有断层。 --><h2v-if="score>=90">优秀</h2><h2v-else-if="score>=80">良好</h2><h2v-else-if="score>=70">中等</h2><h2v-else-if="score>=60">合格</h2><h2v-else>差</h2><hr><ul><!-- v-for指令,用于循环列表。

语法:v-for="(每一项,索引) in 数组",渲染列表时,为了提高渲染性能,

通常都要绑定一个key。key一定要是唯一值。 --><liv-for="(item,index) in goodses"v-bind:key="index">{{item.id}}---{{item.name}}---{{item.price}}<buttonv-on:click="delGoods(index)">删除</button></li></ul></div>

newVue({el:'#app',data:{// 该属性,用于表示是否显示isShow:true,// 定义一个成绩score:88,// 定义一个数组goodses:[{id:1001,name:'乐事薯片',price:'8元'},{id:1002,name:'百事可乐',price:'3元'},{id:1003,name:'元祖月饼',price:'10元'},{id:1004,name:'德芙巧克力',price:'29元'}]},methods:{// 删除商品的方法,将商品的下标通过方法传进来delGoods(index){if(confirm('是否确定删除')){// 再根据数组的下标删除对应的数据this.goodses.splice(index,1)}}},})

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

推荐阅读更多精彩内容

  • 注:读本文前已经默认您已经掌握JavaScript、css、html 等相关知识。 1. 什么是VUE.js? V...
    我方程序员阅读 270评论 0 0
  • 模板语法 文本 双大括号的文本插值 Message:{{msg}} v-once指令:一次性的指令,数据改变时,插...
    cq_春风呼呼的吹阅读 337评论 0 0
  • 1. 生命周期 我们先来看下图: 我们来解释一下上图的各个阶段: beforeCreate: vue实例进行基础初...
    zxhnext阅读 939评论 0 1
  • 1.ES6语法 1.1 let与const let是声明块级变量,作用域某个代码块中,离开代码块失效! 报错:i ...
    hanfy阅读 196评论 0 0
  • 写在前面: 1.安装使用参照官方文档2.这里只记录vue重点 笔记开始: 一个vue组件的data必须是一个函数,...
    梦想成真213阅读 255评论 0 0