学习vue, 记录笔记
代码放在:vue-learn
循环遍历 data中 list 的数据
绑定事件, 放在methods 内
todoList 中在按钮中绑定提交事件
简写: v-on:click => @click
数据的双向绑定
输入框数据发生变化, 则data中数据也发送变化. data 中定义变量发送变化则页面数据也跟着变
v-model.lazy : 懒惰加载,当鼠标移出输入框后才加载
v-model.number : 数字加载,只有输入的是数字才加载,字符串不加载
v-model.trim : 去除空格
向组件传入绑定值,
props 组件接受那些值
简写: v-bind:index => :index
条件判断语句
判断语句, 必须紧跟 v-if, 中间不能插入其他元素
判断语句, 必须紧跟 v-if, 中间不能插入其他元素
将值输出成文本
将值输出成html
输出元素,不会移除dom, 经常控制界面元素显示和影藏
v-show 会渲染到页面,只是display: none;
不支持<template></template>属性
将组件放到内存中,不会每次去销毁,提高性能
主要面向DOM进行操作
View <=> Presenter <=> Model
View : 视图 Presenter : 控制器, 大量的DOM操作
View <=> ViewModel <=> Model
ViewModel : DOM Listeners , Data Bindings. Vue 内置的, 我们并不需要关注
主要面向数据进行操作
可以将页面进行切分, 组件就是界面中的一小块。
父组件使用v-bind 向子组件传值,子组件使用 this.$emit 向父组件触发事件,父组件监听这个时间, 并接受事件的参数
全局变量: app.$data.xx
以$开头的都是这个实例的实例属性和实例方法
app.$destroy() //将这个实例销毁,销毁后再修改值,页面不会发送变化
生命周期函数就是vue实例在某个时间点自动执行的函数
这3个内容之中都可以写js 表达式
v-bind:class
v-bind:[classA, classB]
<div class="static" v-bind:class="{class-a:isA, class-b:isB}"></div>
data : {
isA: true,
isB: false,
}
=> 结果
<div class="static class-a" ></div>
<div v-bind:class="classObject" ></div>
data : {
calssObject :{
'class-a': true,
'class-b': false,
}
}
v-bind:style="xx"
v-bind:[styleObjectA, styleObjectB]
给元素加 key="xx" vue就会认为是页面中唯一的元素,如果key不同就不会复用
<div v-if="show">
用户名: <input>
</div>
<div v-else>
邮箱名: <input>
</div>
加key 不会复用
<div v-if="show">
用户名: <input key="username" />
</div>
<div v-else>
邮箱名: <input key="mail" />
</div>
<div v-for="(item, index) of list"
:key="item.id">
{{item}} -- {{index}}
</div>
性能高: key值唯一,不是用index
我们操作数组的时候,不能使用下标的方式,
app.list = [{新数据}]
Vue.set(app.list, 1, 5)
app.$set(app.list, 1, 5)
模版占位符, 包裹一些元素,并不会被渲染
<template v-for="(item, index) of list"
:key="item.id">
<div>{{item}} -- {{index}}</div>
<span>xxx</span>
</template>
<div v-for="(item, key, index) of userInfo">
<div>{{item}} -- {{key}} -- {{index}} </div>
</div>
//全局方法
Vue.set(app.userInfo, "address", "beijin")
//实例方法
app.$set(app.userInfo, "address", "beijin")
使用is 解决h5中 标签规范 的bug, 包含后页面展现错误
<select>
<option is="row"></option>
</select>
Vue.component("row", {
template : "<tr><td>this is a row</td></tr>",
})
Vue.component("row", {
data : function () {
return {
content : "this is a row"
}
},
template : "<tr><td>{{content}}</td></tr>",
})
使用 ref 定义引用名称
<div ref="hello" @click="handleClick"> hello world</div>
var app = new Vue({
el: "#app",
methods : {
handleClick : function () {
console.log( this.$refs.hello.innerHTML )
}
},
})
父组件
<counter :count="0"></counter>
子组件 使用props 接受父组件传递的参数
var counter = {
template: '<div>{{count}}</div>',
props : ["count"],
}
单项数据流:子组件不能反过来修改父组件的值, 只能拷贝后修改自己的值
当子组件显示依赖父组件传递dom 进行展现的时候,使用插槽
使用该标签实现动画效果, 过渡动画效果。
原理:在一定时间在组件上加css