vue基础

一、vue条件渲染

条件渲染有三个,v-if  v-else-if v-else  使用方法和js相似

v-if:

作用:移除dom节点,

值:Boolean

v-show:

隐藏dom节点

v-show与v-if的区别:v-if 移除dom根节点,v-show将对应根节点的属性增加了 display:none

v-for

基本用法:

        
<div id="app">
    <ul>
        <li v-for = 'item in movies'>{{ item }}</li>
    </ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
     new Vue({
         el: "#app",
         data: {
             movies: ['扫毒2天地对决', '跳舞吧!大象', '英雄之战', '复仇者联盟4:终局之战']
         }
    })
</script>

//返回
扫毒2天地对决
跳舞吧!大象
英雄之战
复仇者联盟4:终局之战      

<div id="app">
    <ul>
        <li v-for = 'item in movies'>电影名称:{{ item.movie }}|评分:{{ item.rate }}</li>
    </ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
 new Vue({
            el: "#app",
            data: {
                movies: [{
                    movie: '扫毒2天地对决',
                    rate: '8.1',
                },{
                    movie: '跳舞吧!大象',
                    rate: '7.6',
                },{
                    movie: '英雄之战',
                    rate: '6.4',
                },{
                    movie: '复仇者联盟4:终局之战',
                    rate: '9.1',
                },]
            }
        })
</script>
//返回
电影名称:扫毒2天地对决|评分:8.1
电影名称:跳舞吧!大象|评分:7.6
电影名称:英雄之战|评分:6.4
电影名称:复仇者联盟4:终局之战|评分:9.1

生命周期

1.beforeCreate   创建前

实例完全被创建出来之前,vue 实例的挂载元素$el和数据对象 data 都为 undefined,还未初始化。

2.created   创建后

数据对象 data 已存在,可以调用 methods 中的方法,操作 data 中的数据,但 dom 未生成,$el 未存在 。

3.beforeMount  挂在前

$el 和 data 都已初始化,挂载之前为虚拟的 dom节点,模板已经在内存中编辑完成了,但是尚未把模板渲染到页面中。

4.mounted  挂在后

data.message 成功渲染。内存中的模板,已经真实的挂载到了页面中,用户已经可以看到渲染好的页面了。

5.beforeUpdate  更新前

当 data 变化时,会触发beforeUpdate方法 。data 数据尚未和最新的数据保持同步。

6.updated  更新后

当 data 变化时,会触发 updated 方法。页面和 data 数据已经保持同步了。

7.beforeDestory 销毁前

组件销毁之前调用 ,在这一步,实例仍然完全可用。

8.destoryed  销毁后

组件销毁之后调用,对 data 的改变不会再触发周期函数,vue 实例已解除事件监听和 dom绑定,但 dom 结构依然存在。

v-model

原理:v-model 实际就是 value属性和oninput时间的 合成

v-model在input中时


<input v-model="sth" />

<input :value="sth" @input="sth = $event.target.value" />

结论:在给input元素添加b-model属性是,默认会把value作为元素的属性,然后把input事件作为实时传递value的出发事件;;

v-model在组件上时


<div id="demo">
 <currency-input v-model="price"></currentcy-input>
 <span>{{price}}</span>
</div>
<script src="https://cdn.bootcss.com/vue/2.3.0/vue.js"></script>
<script>
Vue.component('currency-input', {
 template: `
  <span>
   <input
    ref="input"
    :value="value"
    <!--为什么这里把 'input' 作为触发事件的事件名?`input` 在哪定义的?-->
    @input="$emit('input', $event.target.value)"
   >
  </span>
 `,
 props: ['value'],// 为什么这里要用 value 属性,value在哪里定义的?貌似没找到啊?
})
 
var demo = new Vue({
 el: '#demo',
 data: {
  price: 100,
 }
})

结论:给组件添加v-model属性时,默认会把value作为组件的属性,然后把input作为组件绑定事件时的事件名

vue监听

watch基本用法

当Name值变化时,watch监听到并且执行


<div>
      <p>Name: <input type="text" v-model="Name"></p>
</div> 
new Vue({
  el: '#root',
  data: {
    Name: 'wayne',
  },
  watch: {
    Name(newName, oldName) {
      console.log(newName)
    }
  } 
})

handler方法

watch: {
  Name: {
    handler(newName, oldName) {
      console.log(newName)
    },
    // 代表在wacth里声明了Name这个方法之后立即先去执行handler方法,如果设置了false,那么效果和上边例子一样
    immediate: true
  }
}

deep属性 深度监听 常用爱对象下面属性的改变


<div id="app">
    <input type="text" v-model:value="childrens.name" />
    <input type="text" v-model:value="lastName" />
</div>
 
<script type="text/javascript">	
    var vm = new Vue( {
        el: '#app',
        data: {
            childrens: {
                name: '小强',
                age: 20,
                sex: '男'
            },
            tdArray:["1","2"],
            lastName:"张三"
        },
        watch:{
            childrens:{
                handler:function(val,oldval){
                    console.log(val.name)
                },
                deep:true//对象内部的属性监听,也叫深度监听
            },
            'childrens.name':function(val,oldval){
                console.log(val+"aaa")
            },//键路径必须加上引号
            lastName:function(val,oldval){
                console.log(this.lastName)
            }
        },//以V-model绑定数据时使用的数据变化监测
    } );
    vm.$watch("lastName",function(val,oldval){
        console.log(val)
    })//主动调用$watch方法来进行数据监测
</script>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值