vue.js基础入门(IDEA)

Vue采用自底向上增量开发的设计

vue.js的目标是通过尽可能简单的API实现响应式的数据绑定和组合的视图组件

官网: https://vuejs.org/        https://cn.vuejs.org/   

目录

IDEA添加vue.js插件

示例demo

常用属性

Vue组件

Axios异步通信

计算属性

插槽slot

自定义事件


IDEA添加vue.js插件

新建项目后->File->Settings->Plugins

 ->搜索vue

 创建一个.html文件,然后通过如下方式引入 Vue:

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

示例demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">
    {{message}}
</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

<script>
    var vm = new Vue({
        el:"#app",
        data:{
            message: "hello,vue!"
        }
    });

</script>


</body>
</html>

可以看出,Vue的数据都是和DOM建立关联,所有东西都是响应式的

并且在控制台操作对象属性修改 app.message 的值,可以看到上例相应地更新

 v-bind  attribute 被称为指令。指令带有前缀 v-,以表示它们是 Vue 提供的特殊 attribute

常用属性

  • v-if 
  • v-else
  • v-else-if
  • v-for 指令可以绑定数组的数据来渲染一个项目列表
  • v-on 绑定事件 简写  @
  • v-model 数据双向绑定
  • v-bind  给组件绑定参数  简写  :

  v-on  指令添加一个事件监听器,通过它调用在 Vue 实例中定义的方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">
<button v-on:click="sayHi">click Me</button>
</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

<script>

    var app = new Vue({
        el: '#app',
        data: {
            message: "gao"
        },
        methods: {
               sayHi: function (){
                   alert(this.message)
               }
        }
    })
</script>

</body>
</html>

v-model 指令,它能轻松实现表单输入和应用状态之间的双向绑定。负责监听用户的输入事件以更新数据

Vue组件

除了页头、侧边栏、内容区等组件,每个组件又包含了其他的如导航链接、博文等组件

实例demo 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">
    <!--组件-->
    <gao v-for="g in items" v-bind:gg="g"></gao>
</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

<script>

    Vue.component("gao",{
        props: ['gg'],
        template: '<li>{{gg}}</li>'
    });

    var app = new Vue({
        el: '#app',
        data: {
            items: ["Java","Layui","Vue"]
        }
    });
</script>

</body>
</html>

Axios异步通信

主要实现AJAX异步通信

示例demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="vue">
<div>
    {{info.address.city}}
</div>
</div>
<!--导入JS文件-->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script type="text/javascript">

    var vm = new Vue({
        el: '#vue',
        data(){
            return{
                info: {
                    name: null,
                    address: {
                        country: null,
                        city: null,
                        stress: null
                    },
                    url: null
                }
            }
        },
        mounted(){//ES6新特性
            axios.get('data.json').then(response =>(this.info = response.data));
        }

    });
</script>

</body>
</html>

计算属性

缓存计算数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="example">
    <!--计算属性-->
    <p>Original message: "{{ message }}"</p>
    <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>

</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

<script>
    var vm = new Vue({
        el: '#example',
        data: {
            message: 'Hello'
        },
        computed: {
            // 计算属性的 getter
            reversedMessage: function () {
                // `this` 指向 vm 实例
                return this.message.split('').reverse().join('')
            }
        }
    })
</script>

</body>
</html>

插槽slot

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="example">
<tode>

    <tode-title slot="tode-title" :title="title"></tode-title>
    <tode-items slot="tode-items" v-for="item in todeItems" :item="item" ></tode-items>
</tode>
</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

<script>
    //slot: 插槽
    Vue.component("tode",{
       template: '<div>\
                       <slot name="tode-title"></slot>\
                       <ul>\
                            <slot name="tode-items"></slot>\
                       </ul>\
                  </div>'
       // '<div>' +
       // '<slot></slot>' +
       //     '<ul>'+
       //     '<slot></slot>' +
       //     '</ul>'+
       // '</div>'
    });
    Vue.component("tode-title",{
        props: ['title'],
       template: '<div>{{title}}</div>'
    });
    Vue.component("tode-items",{
        props: ['item']
    });

    var vm = new Vue({
        el: '#example',
        data: {
            title: "列表",
            todeItems: ['11','22','33']
        }
    });
</script>

</body>
</html>

自定义事件

  this.$emit("事件名",参数);  组件内部绑定事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="example">
<tode>

    <tode-title slot="tode-title" :title="title"></tode-title>
    <tode-items slot="tode-items" v-for="(item,index) in todeItems"
                :item="item" v-bind:index="index" v-on:remove="removeItems(index)"></tode-items>
</tode>
</div>

<!--导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

<script>
    //slot: 插槽
    Vue.component("tode",{
       template: '<div>\
                       <slot name="tode-title"></slot>\
                       <ul>\
                            <slot name="tode-items"></slot>\
                       </ul>\
                  </div>'
    });
    Vue.component("tode-title",{
        props: ['title'],
       template: '<div>{{title}}</div>'
    });
    Vue.component("tode-items",{
        props: ['item','index'],
        //只能绑定当前组件的方法
        template: '<li>{{index}}--{{item}}<button @click="remove">删除</button></li>',
        methods: {
            remove: function (index){
                this.$emit('remove',index)
            }
        }
    });

    var vm = new Vue({
        el: '#example',
        data: {
            title: "列表",
            todeItems: ['11','22','33']
        },
        methods: {
            removeItems: function (index) {
                console.log("删除了"+this.todeItems[index]+"OK");
                this.todeItems.splice(index,1);
            }
        }
    });
</script>

</body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值