vue基础(2)

过渡

transition: 分为单行过度和多行过渡;
属性 :name:指定动画名称
        :key:比如多行过渡,两个标签相同只是内容不同,由于vue有diff算法会导致之后替换内容不会替换dom节点,就不能触发过渡效果,可以通过添加key这个属性指定不同的值来实现让他删dom节点
transition-group: 列表过渡
    属性:
        target:默认使用 span包裹里面的内容,可以同时使用tag属性来指定用哪个标签包裹列表数据
        name:动画名称
         key:列表过渡必须要有key;
定义过渡效果(在style里面用):

.fade-enter-active, .fade-leave-active {
  transition: opacity .5s;
}
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
  opacity: 0;
}

fade代表过渡效果名称:
例如:

<transition name='fade'></transition>

注意:表格里面使用过渡的时候,里面包裹其他标签发现经常不能用,推荐使用is属性
例子:

<tbody is='transition-group' name='xxoo'>
      <tr v-for='i in arr' key='i'>
            <td>{{i.name}}</td>
            <td>{{i.age}}</td>
            <td>{{i.size}}</td>
            <td>{{i.class}}</td>
            <td @click='del(i)'>删除</td>
        </tr>
 </tbody>

is后面可以指定 transition 或 transition-group

表单输入

在 input框不同的type类型 v-model存放的内容也不一样;
text 和 radiov-model 存放的是value值
checkbox v-model的true和false可以控制选中和不选中 v-model=‘aa’ 这个aa是数组的情况下,会把选中的内容存放到这个数组中;
select v-model=‘a’ a这个变量存放的值影响哪个option被默认选中
textarea v-model=‘a’ 可以影响文本域里面的内容

表单修饰符

.lazy v-model.lazy后不会实时更新,只有按下回车才更新一次
.number 变成数值类型
.trim 去除两侧无效字符如空格

组件 component

全局组件:

使用 Vue.component('组件名',{
	template:`<div>模板</div>`,
	data(){
		return:{
			name:"张三'
		}
	},
	methods:{

	}
})
使用   <组件名></组件名>

局部组件:

使用 Vue.component('组件名',{
	template:`<div>模板</div>`,
	data(){
		return:{
			name:"张三'
		}
	},
	methods:{

	},
	components:{
		'aChild':{
			template:`<div>子组件只能在父组件的根节点内使用</div>`,
		data(){
			return:{
				sex:"男'
		}
		}
		}
	}

})

组件通信:

子传父:

通过事件向上传递
在子组件标签上使用 @自定义事件名=‘父组件里面的方法名’
例如 <zi @myevent=‘getChild’>
子组件内容通过事件触发
使用 this.$emit(‘自定义事件名’,‘值’)传递数据
例子:

   var aaT = `
        <div>
            我是aa组件
            <bb @haha='show'></bb>
        </div>
        `
        Vue.component('aa', {
            template: aaT,
            data() {
                return {
                    name: "张三"
                }
            },
            methods: {
                show(da) {
                    console.log(da)
                },
            }
        })

        var bbT = `
        <div>
            我bb组件
            <button @click='xxoo'>向父组件传递消息</button>
        </div>
        `
        Vue.component('bb', {
            template: bbT,
            methods: {
                xxoo() {
                    this.$emit('haha', '我真帅')
                }
            },
        })
父传子:

通过属性向下传
这是子组件
自定义了一个属性 myshow
子组件内部使用 props:{ myshow:Boolean} 可以约束类型
内容可以直接{{myshow}}使用父元素传递过来的值
// 通过属性向下传 xxoo是子组件 abc自定义的属性 age是父组件里面的属性
//子组件 使用 props这个属性去接收 props:[‘abc’,‘bb’] props:{‘abc’:String}
//父传子使用属性向下传 如果你的属性值是变量或者是数组使用 :属性 这种动态绑定,不加:会变成字符串
例子:

  var aaT = `
        <div>
            我是aa组件
            <bb :send='name'></bb>
        </div>
        `
        Vue.component('aa',{
            template:aaT,
            data(){
                return{
                    name:"张三"
                }
            },
            methods:{
        
            }
        })

        var bbT = `
        <div>
            我是父组件传来的参数:{{send}}
        </div>
        `
        Vue.component('bb',{
            template:bbT,
            methods:{
            },
            props:{
                send:Number
            }
        })
ref:
<input type="text" ref='in1'> 
      <!-- 1直接放在标签中获取元素节点 -->
 <navbar ref='nchild'></navbar>
      <!-- 2放在组件中获取组件对象 -->

例子:

  <div id="box">
      <input type="text" ref='in1'> 
      <!-- 1直接放在标签中获取元素节点 -->

      <navbar ref='nchild'></navbar>
      <!-- 2放在组件中获取组件对象 -->
      
      <button @click='getref'>获取ref数据</button>
    </div>
    <script>
        Vue.component('navbar',{
            template:`
                <div>
                    我是子组件
                </div>
            `,
            data(){
                return{
                    myname:'子组件状态'
                }
            }
        })
       VM= new Vue({
            el:'#box',
            data:{

            },
            methods:{
                getref(){
                    // console.log(this.$refs.in1.value)
                    console.log(this.$refs.nchild.myname)
                }
            }
        })
    </script>

动态组件:

<component :is="na"></component>
is的值是组件名
<keep-alive>
        <component :is="na"></component>
 </keep-alive>

例子:

div id="box">
        <keep-alive>
        <component :is="na"></component>
        </keep-alive>
        <footer>
            <ul>
                <li @click="na = 'home'">首页</li>
                <li @click="na = 'list'">列表页</li>
                <li @click="na = 'goods'">商品也</li>
            </ul>
        </footer>
    </div>
    <script>
        new Vue({
            el:'#box',
            data:{
                na:'home'
            },
            components:{
                home:{
                    template:`
                        <div>home首页<input type='text'/></div>
                    `
                },
                list:{
                    template:`
                        <div>list列表</div>
                    `
                },
                goods:{
                    template:`
                        <div>goods商品</div>
                    `
                },
            }
        })
    </script>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值