vue学习笔记
2017-08-23 11:10:28
Vue实例:
1 var vm = new Vue({2 // 选项3 })
实例化Vue、Vue实例,构造函数Vue、创建一个Vue的根实例,Vue实例气筒Vue,js应用
所有的 Vue.js 组件其实都是被扩展的 Vue 实例。
尽管可以命令式地创建扩展实例,不过在多数情况下建议将组件构造器注册为一个自定义元素,然后声明式地用在模板中。
步骤:
指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。
v-bind:class 切换或增加类名,就是绑定类名,两种写法:
v-bind:class=“类名”
:class=“类名”//v-bind的简写格式,只留一个冒号,去掉冒号前边的v-bind
v-bind:style 的对象语法是一个 JavaScript 对象。
CSS 属性名可以用驼峰式 (camelCase) 或 (配合引号的) 短横分隔命名 (kebab-case):
<p v-bind:style="color: red, fontSize: 12px, border-bottom: 1px solid red;">
或者把数据用变量替换,动态修改样式的值:
v-bind:style="{color: divColor, fontSize: divFontSize + 'px', 'border-bottom-color': divBC}"
直接绑定到一个样式对象通常更好,让模板更清晰:
<div v-bind:style="bindStyle">
data中:
divStyle: {
color: 'red', fontSize: '18px', 'border-bottom-color': 'blue' }
v-else-if、v-else 搭配v-if
v-else 元素必须紧跟在 v-if 或者 v-else-if 元素的后面——否则它将不会被识别。
<p v-if="bool1">if条件成立</p>
<p v-else-if="bool2">else-if的条件成立</p>
<p v-else>if条件不成立,else-if条件也不成立,显示else</p>
v-show=”等于布尔值得变量名字、直接布尔值” [用于控制元素是否展示,也是根据条件展示元素的选项。]
不过他和if的不同之处是:
v-show的核心原理是通过切换元素css的display来控制元素的显示。当v-show为真值时,该元素的display=block,反之为none。
但是不管在页面中显不显示,他始终在html的源码dom结构中,总是都被渲染出来了。你观察源代码或者看控制台,他还是在的。
而if指令所在的标签行,如果if条件不成立,那么标签行就不会被渲染出来,控制台中也找不到他的尸体。
<p v-show="bool">我是v-show成立的(bool在data中等于true)</p>
<p v-show="boolF">我是v-show没有成立的,但是我依旧存在dom中,你在控制台、源代码处还能看到我哦(bool在data中等于false)</p>
<p v-show="false">我是v-show没有成立的,等号右边除了传入变量也可以传入boolean值来判断是否显示</p>
第三种写法
v-for="(name,key,index) in json" 视图引用:{ {name}}值,{ {key}}键名,{ {index}}索引号
v-on: 事件名=“函数名” [绑定一个事件]
事件名: click、dblclick、mouseover、mouseout、mouseup、mousedown
写法两种:【以click事件为例】
1) v-on:click = “clickFun”
2) @click = “clickFun”//v-on的简写格式,去掉v-on和冒号,改写成@符号
注意
事件对应的处理函数,要放在Vue示例的data后边,专门一个methods[一定要是这个名字]对象里边,当做json数据列好了备用。比如:
data{
msg: “aaa”
...
},
methods: {
clickFun: function(){
console.log(...);
...[这里边的代码和原生js没啥区别了]
},
clickFun2: function($event){
【$event: 事件对象参数,支持很多原生用法。比如阻止冒泡:$event.cancelbubble、阻止默认行为:$event.preventDefault;等】
}
}
v-once [一次性插值]
即当数据被再次动态的改变时,绑定在此节点上的所有属性对应的数据将不会被动态更新
<span v-once>这个数据一次性传进来后将不再改变:{ {msg}}</span>
v-html=“键名”[此属性的值将作为所在标签的内容,并将按照html文档被解析。键名对应的值,是一个包含html标签的字符串]、v-text="键名"[不翻译标签直接输出]
注意;键名对应的属性值里边的数据绑定不会被解析出来,会当做字符串直接输出出来。比如{ {msg}} => { {msg}}、
请只对可信内容使用 HTML 插值,绝不要对用户提供的内容插值。
html
12
js
result
定义组件化模块
Vue.component(‘组件名称’,{
props: [‘属性名’]; //自定义属性
template: “写html结构” //可以用差值传参,例如template: "<li>{ {todo.id}}、{ {todo.text}}</li>"
});
参数放在data内
new Vue({
el: “#app”,
data:{
groceryList: [
{id: 1, text: "苹果"},
{id: 2, text: "香蕉"},
{id: 3, text: "菠萝"}
]
}
})
html结构中:
<ol>
<组件名称
v-for=“item in groceryList”(空格)
v-bind:属性名 = “item”(空格)
v-bind:key = “item.id”//自定义的,可以没有
>
</组件名称>
</ol>
结果:
vue学习出现问题汇总 | ||
序号 | 问题、知识点 | 备注 |
1 | vew Vue({}) | V要大写 |
2 | data数据 | 所有的数据要放到对应el位置的data里边 |
3 | v-model=“msg” | 等号后边不用花括号了 |
4 | el区域与调用 | 调取vue里边的data数据,要在el指定的区域里 |
5 | 循环v-for=“value in arr” | 写法上,是for in的结构,(遍历值在数组中) |
6 | 索引值 $index、$key不出现 | 用1.0版本的指令配合2.0版本的js,当然各种报错, 注意版本的匹配 |
7 | For(k,v)in json k/v反了 | 反过来就好了 |
代码:
html:
index.js
1 2 3 4 5vue study 6 7 8 11 12 1314第一个vue实例
15 { {msg}} 16常用指令
171839v-model双向数据绑定
19它能轻松实现表单输入和应用状态之间的双向绑定。现在就去改变其中一个input吧。20 21 22 23v-model监听输入和下拉,随时展现——input2425 2628modelTest内的值是:
{ {modelTest}}27下拉select,随时展现2930 3638modelTest内的值是:
{ {modelTest2}}374054v-bind:属性名 在dom元素上绑定属性
41只有你想不到,没有他绑不到,只要你想到的属性,都用它来绑上去吧!421、{ {titleTxt}}432、文档中的bind案例,将时间对象Date()加载进来,并转成字符串形式,放到title里边了。——{ {titleTest}}【看来,数据里边的变量,也支持加入原生js,混合成一个新的数据】443、我被绑定了style属性,用字符串的形式把所有的样式传进来了454、我绑定style,在标签内通过大括号绑定于自身,并把数据当做变量传进来。注意双引号里边的大括号不要丢掉。465、我绑定了一个json的样式对象,对象里边的数据都是变量、动态的,标签这里只用传入对象名字。也很清爽47绑定class的应用,就是可以用来切换class进而切换状态的,在v-on:mouseover函数那里应用了,48可以字符串拼接、可以传入一个对象、可以和普通的class同时存在49 v-bind:class传入字符串拼接 50{
{item}} 51 v-bind:class传入对象: 52对象
535576v-if="variate" 根据条件展示元素的选项
56variate = 布尔值对应的变量5758
61- bool是true,你看的到我。我还有个兄弟你看不到
59- boolF是flase,你看的到我
60v-if 渲染一组代码62 63我是v-if的title
64我是v-if的body
65 我是v-if的脚注 66 67v-else-if
68if条件成立
69else-if条件成立
70if和else-if的条件都不成立,else条件成立
71v-else
72v-else 需要配合v-if合作完成.v-else 元素必须紧跟在 v-if 或者 v-else-if 元素的后面——否则它将不会被识别。73if条件成立,显示我了我是v-if里边的a标签
74if条件不成立,显示else的结果我是v-else里边的a标签
7577102v-for 循环 数组/Json对象
78数组中有value代表数值,也有$index做索引值7980
82- 值——"{ {value}}",索引——"{ {index}}"
81v-for 循环 json
83json中有value代表数值,也有$index做索引值,还有$key代表键名,k、v也可以代表键名的对应值84遍历一维数组8586
88- 值:{ {item}}
87遍历json【对象】8990
93- { {k}}—键名, { {v}}—value值 91
92遍历json(对象),获取索引值9495
97- (值、索引、键名){ {name}}--{ {index}}--{ {key}}
96遍历二维数组9899
101- { {item.value}}、{ {item.text}}
100整数迭代103104 { {n}} 105106107117v-on:事件名 = "函数名" 监听交互,添加监听器
108事件名:click、dblclick、mouseover、mouseout、mousedown、mouseup109点击我就惊奇了【v-on:命令点击】
110点击我就惊奇了【@点击】
111双击我就更惊奇了
112鼠标经过我啊
113哈哈我来了114哈哈我来了115 116118137组件化模块
119然实现了批量生产,但是生产的都是一样的。不能复用120121
126122 123 124 125 组件化模块【传参】
127传入参数数据,这样组件就可以重用了128129
136133 134 135138144v-once 一次性插值
139一次性插入,这个节点上所有插值再次动态更改数据不会更新140普通节点上的数据展示:{
{msgOnce}}141一次性属性所在节点上的:{
{msgOnce}}142 143145150v-html 纯HTML、v-text 纯文本,
146v-html 输出真正的html。v-text不翻译标签直接输出147148
149
151163"插值——{ { javascript 表达式 } }"
152运算符表达式 num + 1153num+1 = {
{num + 1}}154三元表达式 ok?'YES'':'NO'155{
{bool? "bool现在是:true":"bool现在是:false"}}156链式调用方法表达式 arrReverse.reverse().join("-")157arr的length:{
{arrReverse.length}},arr翻转:{ {arrReverse.reverse().join("-")}}158字符串拼接 v-bind:id="'list_'+ v"159160
162- { {key}}-{ {index}}
161164170v-show 根据条件展示元素的选项
165同v-if一样,都是根据条件展示元素的选项。其核心是,切换元素的display,也就是说,不管显不显示他都会被渲染到html的dom结构中去,而if不会。if条件如果不成立,则if指令所在的元素将不会被渲染再dom中166我是v-show成立的
167我是v-show没有成立的,但是我依旧存在dom中,你在控制台、源代码处还能看到我哦
168我是v-show没有成立的,等号右边除了传入变量也可以传入boolean值来判断是否显示
169171177数组 变异方法
172它们也将会触发视图更新173174
176- { {item}}
175178194 195事件修饰符
179它们用于v-on:事件名之后,用点表示指令。修饰符也可以一次使用多个,可以串联。但是串联使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。180v-on:click.stop.prevent = "函数名"
181182
184- { {item}}
183键值修饰符:监听键盘事件时添加关键修饰符185v-on:keyup.13 = "函数名"
186Vue 为最常用的按键提供了别名:
187188
190- { {item}}
189可以通过全局 config.keyCodes 对象自定义键值修饰符别名:191193Vue.config.keyCodes.f1 = 112
192
vueJson.js
1 window.onload = function(){ 2 // 创建一个组件化模板(就是你往里边传数据就行,他自动创建结构 3 Vue.component("todo-item",{ 4 template: "
效果图: