Vue指令

一、v-bind

v-bind用于绑定数据和元素属性
例如:绑定a标签的href属性
若不用v-bind 就只有用{{ }}形式

<div class="app">
    <a v-bind:href="url">click me</a>
</div>  
var app = new Vue({
    el:'.app',
    data:{
        url:"https://www.baidu.com",
    }
});

二、判断循环v-if 和v-for

v-if

<div id="app">
    <h1 v-if="ok">true</h1>
    <h1 v-else>false</h1>
</div>
<!--1.导入Vue的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script>
    var vm = new Vue({
        el:'#app',
        data:{
            ok:true
        }
    });
     </script>

v-for

<div id="app">
    <li v-for="item in items">
        {{item.msg}}}
    </li>
</div>
<!--1.导入Vue的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script>
    var vm = new Vue({
        el:'#app',
        data:{
            items:[
                {msg:"niubi"},
                {msg:"keai"},
            ]
        }
    });
</script>

可以取下标

<li v-for="(item,index) in items">

三、时间 v-on

注意VUE中的方法是methods

<script>
    var vm = new Vue({
        el:'#app',
        data:{
            message:"jsg"
        },
        methods:{
            //方法必须定义在vue的method中
            sayhi: function ()
            {
                alert(this.message)
            }
        }
    });
</script>

v-on:+事件
事件

<div id="app">
    <button v-on:click="sayhi">click me</button>
</div>

在这里插入图片描述

四、v-model 双向绑定

v-model本质上是一个语法糖。如下代码本质上是<input :value=“test” @input=“test = $event.target.value”>,其中@input是对输入事件的一个监听:value="test"是将监听事件中的数据放入到input,下面代码是v-model的一个简单的例子。在这边需要强调一点,v-model不仅可以给input赋值还可以获取input中的数据,而且数据的获取是实时的,因为语法糖中是用@input对输入框进行监听的。可以在如下div中加入

{{ test}}

获取input数据,然后去修改input中数据会发现

中数据随之改变

1.文本框

<!--1.导入Vue的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script>
    var vm = new Vue({
        el:'#app',
        data:{msg:"134565",
        }
    });
</script>
<div id="app">
    请输入文本:<input type="text" v-model="msg">{{msg}}
</div>

2.多选框如何展示

<div id="app"><input type="radio" name="sex" value="" v-model="msg"><input type="radio" name="sex" value="" v-model="msg">
    <p>
        选取了谁:{{msg}}
    </p>
</div>
<!--1.导入Vue的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script>
    var vm = new Vue({
        el:'#app',
        data:{msg:"",
        }
    });
</script>

多选框如何只能选一个:
设置同一个name,将value设置为不同的值即可

设置html radio 默认选中的方法:添加checked 属性,设置为 true,
v-model绑定的是目标的value

3.下拉框

<div id="app">
    <select v-model="msg">
        <option value="" disabled>----请选择----</option>
        <option>A</option>
        <option>B</option>
        <option>C</option>
    </select>
    <p>value:{{msg}}</p>
</div>
<!--1.导入Vue的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script>
    var vm = new Vue({
        el:'#app',
        data:{msg:"",
        }
    });
</script>

注意:v-model的表达式的初始值未能匹配任何选项 <select元素将会被渲染为“未选中”状态在ios中会报错
如何让第一行有在这里插入图片描述
添加即可

<option value="" disabled>----请选择----</option>

五、Vue.component组件

感觉组件有点难
props可以传值从vue接受值
组件自己不能直接接受

<!--view层-->
<div id="app">
    <lyj v-for="item in items" v-bind:qin="item"></lyj>
</div>
<!--1.导入Vue的js文件-->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>

<script>
    Vue.component("lyj",{
        props:['qin'],
        template:"<li>{{qin}}</li>"
    })
    var vm = new Vue({
        el:'#app',
        data:{
            items:["A","B","C"]
        }
    });
</script>

六、axios通信及mount方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<style>
    [v-clock]{
        display:none;
    }
</style>
<div id="app" v-clock>
    <div>{{info.name}}</div>
    <div>{{info.address.city}}</div>
    <a v-bind:href="info.url">click me</a>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
    var vm = new Vue({
        el: "#app",
        data(){
            return{
                info:  {
                    name:null,
                    url:null,
                    address:{
                        street:null,
                        city:null,
                        country:null
                    }
                }
            }
        },
        mounted(){//钩子函数 链式编程
            axios.get('../data.json').then(response=>(this.info=response.data));
        }
    });
</script>
</body>
</html>

七、computed 计算属性

我们的vue对象中有一个属性,使用缓存来 将不经常变化的属性的结果缓存,下一次可以不用重复,直接从内存中调取,节省系统的资源开销
注意事项:

  • methods computed不能重名,重名之后会有优先级问题,method优先级高 特性:
  • 作用于缓存中,和mybatis十分相似,一旦内部有属性变化就会立刻刷新
<div id="app" v-clock>
    Now:{ {getTime()} }
    Now2:{ {getTime2} }
</div>
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
<script>
    var vm = new Vue({
        el: "#app",
        data:{
            message:'123'
        },
        methods:{
            getTime:function(){
                return Date.now();
            }
        },
        computed:{
            getTime2:function(){
                this.message;
                return Date.now();
            }
        }
    });
</script>

八、插槽slot

我的理解slot像是一种段落
使用slot后可以在子组件内显示插入的新标签
注意:在使用slot时要 声明是哪一个组件 slot=“to_title” 如这样

        <to_title slot="to_title" v-bind:title="title"></to_title>
        <to_items slot="to_items" v-for="item in todoItems" v-

<div id="app">
    <to_do>
        <to_title slot="to_title" v-bind:title="title"></to_title>
        <to_items slot="to_items" v-for="item in todoItems" v-bind:item="item">        </to_items>
    </to_do>
</div>
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
<script>
    Vue.component("to_do",{
        template: '<div>' +
            '<slot name="to_title"></slot>'+
            '<ul>' +
            '<slot name="to_items"></slot>'+
            '</ul>'+
            '</div>'
    });
    Vue.component("to_title",{
        props: ['title'],
        template: '<p>{{title}}</p>'
    });
    Vue.component("to_items",{
        props: ['item'],
        template: '<li>{{item}}</li>'
    });
    var vm = new Vue({
        el: "#app",
        data: {
            title: '课程列表',
            todoItems: ['kuansheng说java','kuansheng说vue']
        }
    });
</script>

九. 自定义事件分发(重点)

由于在组件component里无法操作在vue里的元素
所以利用vue定义一个方法 绑定在slot组件里,组件在从前端slot里取操作

在这里插入图片描述

<div id="app">
    <to_do>
        <to_title slot="to_title" v-bind:title="title"></to_title>
        <to_items slot="to_items" v-for="item in todoItems" v-bind:item="item">        </to_items>
    </to_do>
</div>
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
<script>
    Vue.component("to_do",{
        template: '<div>' +
            '<slot name="to_title"></slot>'+
            '<ul>' +
            '<slot name="to_items"></slot>'+
            '</ul>'+
            '</div>'
    });
    Vue.component("to_title",{
        props: ['title'],
        template: '<p>{{title}}</p>'
    });
    Vue.component("to_items",{
        props: ['item'],
        template: '<li>{{item}}</li>'
    });
    var vm = new Vue({
        el: "#app",
        data: {
            title: '课程列表',
            todoItems: ['kuansheng说java','kuansheng说vue']
        }
    });
</script>

详解:this.$emit()函数

this.$emit(“function”,param); //其中function为父组件定义函数,param为需要传递参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值