Vue入门

属性绑定 v-bind

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>

<!--<div id="app">{{msg}}</div>-->

<!--v-bind事件绑定 简写:-->
<!--<span id="app" v-bind:title="msg">鼠标悬停查看</span>-->
<span id="app" :title="msg">鼠标悬停查看</span>

<script>
    var vm = new Vue({
        el: "#app",
        // model 数据
        data:{
            msg: "hello vue"
        }
    });
</script>
</body>
</html>

if

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <!--<p v-if="show">yes</p>
    <p v-else="show">no</p>-->

    <p v-if="type==='a'">a</p>
    <p v-else-if="type==='b'">b</p>
    <p v-else-if="type==='c'">c</p>
    <p v-else="type==='d'">d</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            // show: true
            type: "a"
        }
    });
</script>
</body>
</html>

for

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <div v-for="(obj,index) in list">
        {{obj.msg}}---{{index}}
    </div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            list: [
                {msg: "html"},
                {msg: "css"},
                {msg: "js"}
            ]
        }
    });
</script>
</body>
</html>

事件绑定 v-on

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">


    <!--v-on 事件绑定 简写@-->
    <button v-on:click="sayHello">button</button>
    <button @click="sayHello">button2</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            msg: "hello"
        },
        // Vue的方法需要定义在methods中
        methods: {
            sayHello: function () {
                alert(this.msg);
            }
        }
    });
</script>
</body>
</html>

双向绑定 v-model

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">

<!--<input type="radio" value="male" v-model="sex">男
<input type="radio" value="female" v-model="sex">女
    <br>
    你的性别为:<span>{{sex}}</span>-->

    <!--下拉框使用双向绑定会失去selected 默认选择-->
    <select v-model="type">

        <option value="" disabled>---请选择---</option>
        <option>a</option>
        <option>b</option>
        <option>c</option>
    </select>
    <div>value:{{type}}</div>

</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            // sex: ""
            type: ""
        }
    });
</script>
</body>
</html>

组件 component

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">

   <starry v-for="(item,index) in items" v-bind:key="index" v-bind:value="item"></starry>

</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>

    // 定义组件
    Vue.component("starry",{
        // 父组件给子组件传递参数需要使用props
        props: ['value'],
        template: '<li>{{value}}</li>'
    });


    var vm = new Vue({
        el: "#app",
        data: {
            items: ["html","css","js"]
        }
    });


</script>
</body>
</html>

Axios异步通信

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml"
      xmlns:v-text="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">


    <div>{{info.name}}</div>
    <a v-bind:href="info.url">点击跳转</a>
    <ul>
        <li v-for="(item,index) in info.links" v-bind:key="index" >
            {{item.name}}---{{item.url}}
        </li>
    </ul>


</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.js"></script>
<script>

    var vm = new Vue({
        el: "#app",
        // 方法
        data(){
            return {
                info: {
                    name: null,
                    url: null,
                    address: {
                        street: null,
                        city: null,
                        country: null
                    },
                    links: []
                }
            };
        },
        // 钩子函数
        mounted(){
            axios.get("../data.json").then(response => (this.info = response.data));
        }
    });


</script>
</body>
</html>

计算属性 computed

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml"
      xmlns:v-text="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">

<div>方法:{{currentTime1()}}</div>
<div>属性:{{currentTime2}}</div>
<!--计算属性和方法都能到达相同的效果,计算属性可以缓存结果,计算属性就是属性-->


</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.js"></script>
<script>

    var vm = new Vue({
        el: "#app",
        data: {
            msg: "test"
        },
        // 方法
        methods: {
            // 返回当前时间戳
            currentTime1:function () {
                return Date.now();
            }
        },
        // 计算属性中方法的操作会被缓存起来,下次再运行方法时,直接返回缓存的值,当数据被改变时才会再次只需方法
        // console.log(vm.currentTime2)
        computed: {
            // 返回当前时间戳
            currentTime2:function () {
                this.msg;
                return Date.now();
            }
        }
    });


</script>
</body>
</html>

插槽 slot

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml"
      xmlns:v-text="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">

    <!--<p>列表书籍</p>
    <ul>
        <li>java</li>
        <li>linux</li>
        <li>python</li>
    </ul>-->

    <!--slot绑定对应的组件,v-bind 绑定定义的参数-->
    <todo>
        <todo-title slot="todo-title" :title="title"></todo-title>
        <todo-items slot="todo-items" v-for="(item,index) in items" :key="index" :item="item"></todo-items>
    </todo>

</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.js"></script>
<script>

    // slot插槽 name属性绑定对应的组件
    Vue.component("todo",{
        template: `<div>
                        <slot name="todo-title"></slot>
                        <ul>
                            <slot name="todo-items"></slot>
                        </ul>
                   </div>`
    });

    Vue.component("todo-title",{
        props: ['title'],
        template: `<p>{{title}}</p>`
    });

    Vue.component("todo-items",{
        props: ['item'],
        template: `<li>{{item}}</li>`
    });

    var vm = new Vue({
        el: "#app",
        data: {
            title: "书籍列表",
            items: ['Java','Linux','Python']
        },

    });


</script>
</body>
</html>

子组件向父组件传递参数 this.$emit

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml"
      xmlns:v-text="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">

    <!--<p>列表书籍</p>
    <ul>
        <li>java</li>
        <li>linux</li>
        <li>python</li>
    </ul>-->

    <!--slot绑定对应的组件,v-bind 绑定定义的参数-->
    <todo>
        <todo-title slot="todo-title" :title="title"></todo-title>
        <todo-items slot="todo-items" v-for="(item,index) in items" :key="index" :item="item"
                   :index="index"  @remove="removeItem(index)"></todo-items>
    </todo>

</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.js"></script>
<script>

    // slot插槽 name属性绑定对应的组件
    Vue.component("todo",{
        template: `<div>
                        <slot name="todo-title"></slot>
                        <ul>
                            <slot name="todo-items"></slot>
                        </ul>
                   </div>`
    });

    Vue.component("todo-title",{
        props: ['title'],
        template: `<p>{{title}}</p>`
    });

    Vue.component("todo-items",{
        // 定义参数index
        props: ['item','index'],
        // 添加事件绑定
        template: `<li>{{item}} <button @click="remove">删除</button></li>`,
        methods: {
            remove:function (index) {
                // this.$emit传递参数,
                // 参数一:自定义方法名,
                // 参数二:实际执行方法参数
                this.$emit('remove',index);
            }
        }
    });

    var vm = new Vue({
        el: "#app",
        data: {
            title: "书籍列表",
            items: ['Java','Linux','Python']
        },
        methods: {
            /* 操作vm虚拟DOM参数 items
                * splice()从数组中删除元素,可添加参数
                * start: number, 开始索引
                * deleteCount: number, 删除数量
                * ...items: T[] 添加元素
                * */
            removeItem:function (index) {
                this.items.splice(index, 1);
            }
        }

    });


</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值