vue :class 动态绑定样式_用最笨的方法学习vue(一)

我个人觉得其实vue的入门很简单,但是要精通确实要有实战的经验的积累,单凭官网的简单实例,以及网上的教材很难做到精通,现在就让我们一起从vue的入门学起吧!

首先下载vue.js 文件 ,然后引入,(这里为了方便学习和使用所以先下载下来,实质项目中并不需要,只需npm 或者yard ) 很简单一个script 标签 <script src="./vue.js"></script>

其次,在div 中绑定vue 上代码, <div id="app"> 您好! {{message}}, {{arr}}以后日子多多指教 </div>

<script> var vm = new Vue({ el: '#app', data: { message: '我是VUE', arr: [1,2,3,4] } }) </script>

一个简单的vue实例就创建完了,然后在浏览器上跑起来,结果是 : 您好! 我是VUE, [ 1, 2, 3, 4 ]以后日子多多指教 是不是很简单就学会了.

好,接下来我学习一下vue的生命周期, vue 的生命周期也叫钩子函数,是vue从创建到销毁所触发的函数,

1.beforeCreate(){console.log("创建之前");}, beforeCreate(),这是第一个生命周期函数, 表示实例完全被创建出来之前, 会执行它,此时data和methods中的数据和方法都还没有被初始化,在这里是获取不到data中的数据的,console会报错,undefined

2.created(){console.log("创建完成");}, created()这是第二个命周期函数 在created 中, data和methods,都已经被初始好了,所以 如果要调用 methods 中的方法, 或者操作data中的数据, 最早只能在created 中操作

3.beforeMount(){console.log("挂载之前");}, 这是第三个生命周期函数,表示模板已经在内存中编译完成了,但是尚未把数据模板渲染到页 如果这个时候想获取页面中的元素只能获取到未编译的值console.log(document.getElementById("h3").innerText);
console.log(this.$refs.myh3); //undefind 还没有获取到dom元素,在 beforeMount执行的时候, 页面中的元素, 还没有被真正替换过来, 只是之前写的一些模板字符串

4.mounted(){console.log("挂载完成");},这是第四个生命周期函数,表示 内存中的模板,已经真实的挂载到了页面中, 用户已经可以看到渲染好的页面了
console.log(document.getElementById("h3").innerText);
console.log(this.$refs.hh3.innerText); //ok 这句话表明 要操作dom 元素至少在挂载完成后
注意 : mounted 是实例创建期间的最后一个生命周期, 当执行完mounted 就表示,实例已经被完全创建好了, 此时, 如果没有其他操作的话, 这个实例, 就静静的躺在我们的内存中, 一动不动

5.接下来是运行中的两个事件
beforeUpdate(){ //这个时候表示 , 页面还没有被更新,数据更新了
console.log("页面上元素的内容:" + document.getElementById("h3").innerText);
console.log("data中的msg数据是:" + this.msg);
结论: 当执行了beforeUpdate 的时候,页面中显示的数据还是旧的,此时data中的数据是最新的, 页面尚未和最新的数据保持同步

6.updated(){console.log("更新完成"+this.message);}, console.log("页面上元素的内容:" + document.getElementById("h3").innerText);
console.log("data中的msg数据是:" + this.msg);
updated 事件执行的时候, 页面和data 中的数据已经保持同步了, 都是最新的

7.beforeDestroy(){console.log("销毁之前");},

8.destroyed(){console.log("销毁了");}

这就是vue的八个钩子函数(也叫生命周期),vue 的生命周期很重要,学好了vue的生命周期学懂了一半vue,这里已经讲得比较清楚,如果还有疑问,欢迎一起来探讨.

学完了vue 的生命周期,接下来我们学习一下,vue的模板语法,也是很简单,直接上代码,

<body>

<div id="app">

{{message}} {{1+2}} {{1+1>1?'YES':'No'}}

<span v-if="1>2">我是v-if </span>

<button v-on:click="myFun">修改1</button>

<button @click="message=666">修改2</button>

<div v-html="myHTML"></div>

<img v-bind:src="imageURL" alt="">

<div v-bind:id="myId" v-bind:class="myClass"></div>

<div :id="myId" :class="myClass"></div>

</div>

</body>

</html>

<script>

new Vue({

el: '#app',

data: {

message: 'Hello Vue',

imageURL: 'http://fb.topitme.com/b/2d/0f/112647038896a0f2dbo.jpg',

myId: '007',

myClass: 'app',

myHTML: `<div style="width:100px;height:100px;background:orange">我是html格式的数据,你要按html的方式给我渲染出来</div> `

} ,

methods:{

myFun(){

this.message = 5555;

}

}

})

</script>

插值表达式 {{message}} 可以直接访问data里的属性 ,比如message 插值表达式还可以做简单的运算以及逻辑判断,如三木运算符,

v-if 是指令 跟 v-show (后面会讲到)一样都是指令,他是动态的隐藏与显示元素, 但两者又有不一样的区别, v-if 是是将dom元素整个添加或删除, 而v-show是简单的控制元素的display的属性dom元素还在。比较官方的说法是,

1.手段:v-if是动态的向DOM树内添加或者删除DOM元素;v-show是通过设置DOM元素的display样式属性控制显隐;

2.编译过程:v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show只是简单的基于css切换;

3.编译条件:v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载); v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;

4.性能消耗:v-if有更高的切换消耗;v-show有更高的初始渲染消耗;

5.使用场景:v-if适合运营条件不大可能改变;v-show适合频繁切换。

这里需要注意的一点是, v-if 和v-for(后面会讲到)一起使用时,v-for 具有比 v-if 更高的优先级。

v-on:click 也是vue提供的指令, 会触发methods 中的方法 , ,如上面的代码, 点击修改1 的时候会触发myFun 改变message 从而改变视图, 是不是很方便, 并不用我们去操作整个Dom 对象,只需关注业务逻辑, 这就是vue 的精髓之一.它3还挺功了简写的方式 @click

v-html 指令会将HTML 代码渲染出来,而不是直接读出来

v-bind: 指令是用来绑定元素的属性的, 绑定之后就可以动态的添加属性的值了, 它也提供了简写的方式 ' : ' 冒号. 属性绑定之后也可以做简单js 运算, 比如 :value = '1+1'

计算属性,顾名思义就是一种属性, 计算说明是动词,只有发生变化的时候才会改变的属性值,

比如 computed: {
reverseMessage(){
return this.message.split('').reverse().join('');
} 我们可以直接在插值表达式中使用它, {{reverseMessage}},而不用做任何的处理,这里他定义的是一个function 的形式,所有的不需要改变的值都可以事先存到计算属性当中,知道发生改变,计算属性会自动更新到视图中.

属性监听: 是监听data中的属性,一旦发生改变,立即更新视图, 具体的用法可以这样用

data: {
message: 'Hello Vuew',
},

watch: {
message(newValue){
console.log("message的新值是"+newValue);
}
}

双向数据绑定其实就是绑定v-modul 指令,就可以实现数据的双驱动效果,数据改变立马更新到视图中,上代码:

<input type="text" v-model="message">
{{message}}

data:{

message:'双向数据绑定就是这么简单'

}

ok,现在我来讲一下class ,上面有说到要讲的, 咱作为最笨的人,学习不能落下任何一个知识点,

class 你可以绑定一个对象,比如

<div v-bind:class="{active:isActive}">我是绑定class 的div</div>

然后在style 中定义好active 的属性值,

.active {
width: 100px;
height: 100px;
background: orange;
}

然后就可以通过改变isActive 的值来动态的改变div 的class

<button @click='isActive=!isActive'>改变div的class</button>

data:{

isActive:false

}

第二种情况: 绑定数组

<div v-bind:class="[classObject,msg]">我是绑定数组的div</div>

data: {
isActive: true,
msg: 'msg'
},
computed: {
classObject(){
return {
active: this.isActive,
}
}
}

第三种情况: 可以绑定计算属性

<div v-bind:class="classObject">我是绑定计算属性的div</div>

computed: {

classObject(){

return {

active: this.isActive,

}

}

}

同样的,我们也可以绑定style 属性进行css 样式

<div id="app">
<div style="width:100px;height:100px;background-color: orange;margin-bottom: 10px"></div>
<div v-bind:style="{width:styleObject.width,height: '100px',backgroundColor:'orange'}"></div>
<div v-bind:style="styleObject"></div>
<div v-bind:style="[styleObject,msgStyle]">普通信息</div>
<div v-bind:style="[styleObject,dangerStyle]">警告信息</div>
</div>

new Vue({
el: '#app',
data: {
styleObject: {
width: '100px',
height: '100px',
backgroundColor: 'cyan',
marginBottom: '10px'
},
msgStyle: {
color: 'lightgray'
},
dangerStyle: {
color: 'red'
}
}
})

这样是不是很简单明了,这就是vue作者考虑到css 样式做的特殊的处理.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值