Vue.js——在vue中绑定样式的两种⽅式在Vue中使⽤样式
使⽤class样式
<style>
.red {
color: red;
}
.thin {
font-weight: 200;
}
.italic {
font-style: italic;
}
.active {
letter-spacing: 0.5em;
}
</style>
1. 数组
<h1 :class="['red', 'thin']">这是⼀个邪恶的H1</h1>
2. 数组中使⽤三元表达式
<h1 :class="['red', 'thin', isactive?'active':'']">这是⼀个邪恶的H1</h1>
3. 数组中嵌套对象
<h1 :class="['red', 'thin', {'active': isactive}]">这是⼀个邪恶的H1</h1>
4. 直接使⽤对象
<h1 :class="{red:true, italic:true, active:true, thin:true}">这是⼀个邪恶的H1</h1>
<script>fontweight取值
// 创建 Vue 实例,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {
flag: true,
classObj: { red: true, thin: true, italic: false, active: false }
},
methods: {}
});
</script>
使⽤内联样式(style)
1. 直接在元素上通过 :style 的形式,书写样式对象
<h1 :>这是⼀个善良的H1</h1>
2. 将样式对象,定义到 data 中,并直接引⽤到 :style 中
在data上定义样式:
data: {
h1StyleObj: { color: 'red', 'font-size': '40px', 'font-weight': '200' }
}
在元素中,通过属性绑定的形式,将样式对象应⽤到元素中:
<h1 :>这是⼀个善良的H1</h1>
3. 在 :style 中通过数组,引⽤多个 data 上的样式对象
在data上定义样式:
data: {
h1StyleObj: { color: 'red', 'font-size': '40px', 'font-weight': '200' },
h1StyleObj2: { fontStyle: 'italic' }
}
在元素中,通过属性绑定的形式,将样式对象应⽤到元素中:
<h1 :>这是⼀个善良的H1</h1>
Vue指令之v-for和key属性
1. 迭代数组
<ul>
<li v-for="(item, i) in list">索引:{{i}} --- 姓名:{{item.name}} --- 年龄:{{item.age}}</li>
</ul>
2. 迭代对象中的属性
<!-- 循环遍历对象⾝上的属性 -->
<div v-for="(val, key, i) in userInfo">{{val}} --- {{key}} --- {{i}}</div>
3. 迭代数字
<p v-for="i in 10">这是第 {{i}} 个P标签</p>
2.2.0+ 的版本⾥,当在组件中使⽤ v-for 时,key 现在是必须的。
当 Vue.js ⽤ v-for 正在更新已渲染过的元素列表时,它默认⽤ “就地复⽤” 策略。如果数据项的顺序被改变,Vue将不是移动 DOM 元素来匹配数据项的顺序, ⽽是简单复⽤此处每个元素,并且确保它在特定索引下显⽰已被渲染过的每个元素。
为了给 Vue ⼀个提⽰,以便它能跟踪每个节点的⾝份,从⽽重⽤和重新排序现有元素,你需要为每项提供⼀个唯⼀ key 属性。
Vue指令之v-if和v-show
⼀般来说,v-if 有更⾼的切换消耗⽽ v-show 有更⾼的初始渲染消耗。因此,如果需要频繁切换 v-show 较好,如果在运⾏时条件不⼤可能改变 v-if 较好。
品牌管理案例
添加新品牌
删除品牌
根据条件筛选品牌
1. 1.x 版本中的filterBy指令,在
2.x中已经被废除:
<tr v-for="item in list | filterBy searchName in 'name'">
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{ime}}</td>
<td>
<a href="#" @click.prevent="del(item.id)">删除</a>
</td>
</tr>
2. 在2.x版本中:
筛选框绑定到 VM 实例中的 searchName 属性:
<hr> 输⼊筛选名称:
<input type="text" v-model="searchName">
在使⽤ v-for 指令循环每⼀⾏数据的时候,不再直接 item in list,⽽是 in ⼀个 过滤的methods ⽅法,同时,把过滤条件searchName传递进去:
<tbody>
<tr v-for="item in search(searchName)">
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{ime}}</td>
<td>
<a href="#" @click.prevent="del(item.id)">删除</a>
</td>
</tr>
</tbody>
search 过滤⽅法中,使⽤ 数组的 filter ⽅法进⾏过滤:
search(name) {
return this.list.filter(x => {
return x.name.indexOf(name) != -1;
});
}
Vue调试⼯具vue-devtools的安装步骤和使⽤
过滤器
概念:Vue.js 允许你⾃定义过滤器,可被⽤作⼀些常见的⽂本格式化。过滤器可以⽤在两个地⽅:mustache 插值和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符指⽰;
私有过滤器
1. HTML元素:
<td>{{ime | dataFormat('yyyy-mm-dd')}}</td>
2. 私有 filters 定义⽅式:
filters: { // 私有局部过滤器,只能在当前 VM 对象所控制的 View 区域进⾏使⽤
dataFormat(input, pattern = "") { // 在参数列表中通过 pattern="" 来指定形参默认值,防⽌报错
var dt = new Date(input);
// 获取年⽉⽇
var y = dt.getFullYear();
var m = (dt.getMonth() + 1).toString().padStart(2, '0');
var d = dt.getDate().toString().padStart(2, '0');
// 如果传递进来的字符串类型,转为⼩写之后,等于 yyyy-mm-dd,那么就返回年-⽉-⽇
// 否则,就返回年-⽉-⽇时:分:秒
if (LowerCase() === 'yyyy-mm-dd') {
return `${y}-${m}-${d}`;
} else {
// 获取时分秒
var hh = dt.getHours().toString().padStart(2, '0');
var mm = dt.getMinutes().toString().padStart(2, '0');
var ss = dt.getSeconds().toString().padStart(2, '0');
return `${y}-${m}-${d} ${hh}:${mm}:${ss}`;
}
}
}
使⽤ES6中的字符串新⽅法 String.prototype.padStart(maxLength, fillString=’’) 或 String.prototype.padEnd(maxLength, fillString=’’)来填充字符串;
全局过滤器

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。