vue一小时入门

vue一小时入门1、Vue.js是什么?vue就是一个js库,核心只关注视图层。2、为什么使用?声明式,响应式的数据绑定组件化的开发3、MVVM模式vue的核心

1、Vue.js是什么?

vue就是一个js库,核心只关注视图层。

2、为什么使用?

  • 声明式,响应式的数据绑定
  • 组件化的开发

3、MVVM模式

vue的核心是mvvm模式, mvvm是Model-View-ViewModel的简写。

Model:【模型】指的是传递的数据。

View:【视图】指的是页面。

ViewModel:【视图模型】mvvm模式的核心,它是连接【视图】和【模型】的桥梁。

它有两个方向:

一是将【模型】展示到【视图】,即将数据展示到页面。实现的方式是:数据绑定。

二是将【视图】转化成【模型】,即将页面转化成数据传递到后端。实现的方式是:DOM 事件监听。

这两个方向都实现的,称之为数据的双向绑定。

4、Vue入门

<!--html中引入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
<div id="app">
		{{ message }}
</div>
<script>
var app = new Vue({
    el: '#app',
    data: {
    message: 'Hello Vue!'
    }
})

</script>

  • 视图 <div id=”app”></div>
  • 视图模型 new Vue() ( el: ‘#app’:绑定视图 )
  • 模型 {message: ‘Hello Vue!’}

5、常用指令

  • V-if
<div id="app">
		{{ msg}}
		<div v-if="info">测试V-if</div>
</div>
<script>
new Vue({
    el: "#app",
    data:{
    msg: 'hello world',
    info: true
    }
})
</script>
  • V-else
<div id="app">
    <div v-if="age<=10">小于等于10</div>
    <div v-else>大于10</div>
</div>

<script>
    new Vue({
        el: "#app",
        data:{
        age: 10
        }
     })
</script>
  • V-else-if
<div id="app">
    <div v-if="age<=10">小于等于10</div>
    <div v-else-if="age>10 && age<15">大于10并且小于15</div>
    <div v-else>大于15</div>
</div>

<script>
    new Vue({
        el: "#app",
        data:{
        age: 10
        }
    })
</script>
  • V-for循环
<div id="app">
    <ul>
    <li v-for="(item, index) in list" :key="index">
    {{item.name}} {{item.age}}
    </li>
    </ul>
</div>

<script>
    new Vue({
        el: "#app",
        data:{
            list:[
              {name: '张三',age:10},
              {name: '李四',age:15}
            ]
        }
    })
</script>
  • V-show 判断是否显示
<div id="app">
    {{ msg}}
    <!-- info为false时,不会加载标签 -->
    <div v-if="info">测试V-if</div>
    <!-- info为false时,会加载标签,并隐藏 -->
    <div v-show="info">测试v-show</div>
</div>

<script>
    new Vue({
        el: "#app",
        data:{
        info: true
        }
    })
</script>
  • V-model 数据双向绑定
<div id="app">
    <!-- v-model:双向绑定有value属性的标签。变量:datafrom.name-->
    <input v-model="datafrom.name">
    <input v-model="datafrom.age">
</div>

<script>
    new Vue({
      el: "#app",
      data:{
      datafrom:{
          name:'',
          age:''
      }
      }
    })
</script>
  • V-bind绑定属性
<div id="app">
    <!-- v-bind指令可以在其名称后面带一个参数,中间放一个冒号隔开,-->
    <!--这个参数通常是HTML元素的特性(attribute),例如:v-bind:class-->
    <div v-bind:style="color">绑定style</div>
    <div v-bind:class="{aa : info}">绑定class</div>
    <!--简写语法-->
    <div :style="color">绑定style</div>
    <div :class="{aa : info}">绑定class</div>
</div>

<script>
    new Vue({
        el: "#app",
        data:{
        datafrom:{
            color: {
            color: 'red'
        },
        info:true
        }
        }
    })
</script>
<style>
    .aa{
    color: aqua;
    }
</style>
  • V-on 绑定事件
<div id="app">
    <input type="button" v-on:click="infoClick" value="点击事件">
    <!--简写语法-->
    <input type="button" @click="infoClick" value="点击事件1">
</div>

<script>
    new Vue({
        el: "#app",
        data:{
        },
        methods: {
            //定义函数
            infoClick(){
            console.log('123456');
            }
        }
    })
</script>

6、Vue实例 生命周期钩子

<div id="app">
</div>

<script>
    new Vue({
        el: "#app",
        data:{
        },
        // 自定义函数属性
        methods: {
            infoClick(){
            console.log('123456');
            }
        },
        //vue实例化之后调用
        created: function () {
            // `this` 指向 vm 实例
            console.log('vue实例化之后调用')
        },
        // 文档就绪事件
        mounted(){
            console.log('文档就绪事件')
            this.infoClick()
        }
    })
</script>

7、计算属性和侦听器

<div id="app">
    语文<input v-model="yuwen">
    数学<input v-model="shuxue">
    英语<input v-model="yingyu">
    总分:<div>{{ zongfen }}</div>
    总分:<div>{{ zongfen }}</div>
</div>

<script>
    new Vue({
        el: "#app",
        data:{
          yuwen: 0,
          shuxue: 0,
          yingyu:0,
        },
        methods: {
        },
        // 计算属性
        computed:{
            zongfen(){
            return parseFloat(this.yuwen)+parseFloat(this.shuxue)+parseFloat(this.yingyu);
        }
        }
    })
</script>

8、组件

  • 组件注册
<div id="app">
    <!--全局组件使用-->
    <hello> </hello>
    <!--局部组件使用-->
    <hello1> </hello1>
</div>

<script>
    // 注册全局组件
    Vue.component("hello",{
        data(){
            return {
               msg: 'HelloWorld'
            }
        },
        template: '<div>{{ msg }}</div>'
        })
        //局部组件
        var hello1={
            data(){
                return {
                		msg: 'hello1'
                }
            },
            template: '<div>{{ msg }}</div>'
    }
        
    new Vue({
        el: '#app',
        data:{
            arr:["张三",'李四'],
            student:{
            name: '张三',
            age:19
        },
        count: 0
        },
        //局部组件注册 两种写法效果一致
        components:{
            // 'hello1':hello1
            hello1
        }
    })
</script>
  • 组件自定义属性(父子组件之间 “传值”)
<div id="app">
    <!--全局组件使用 普通字符串不需要v-bind 。 数字、变量、布尔类型、对象、数组需要v-bind,例::title="123"-->
    <hello type="张三" :title="123" :list="arr" :student="student" info="aaaa"> </hello>
</div>

<script>
    // 注册全局组件
    Vue.component("hello",{
    data(){
        return {
        		msg: 'HelloWorld'
        }
    },
    //组件定义属性 只定义名称
    // props:['type','title'],

    //组件定义属性 (定义名称带类型、以及限制)
    props:{
        type: String,
        title: [Number,String],
        list: Array,
        student: {
        type: Object,
        required: true,
        },
        info:{
            type:String,
            default:'info'
        }
    },
    template: '<div>{{ msg }}</div>'
    })

    //局部组件同理。。

    new Vue({
        el: '#app',
        data:{
            arr:["张三",'李四'],
            student:{
            name: '张三',
            age:19
        },
        count: 0
        },
        		//局部组件注册 两种写法效果一致
        components:{
            // 'hello1':hello1
            hello1
        }
    })
</script>
  • 监听子组件事件(子组件传值到父组件)
<div id="app">
    <!--全局组件使用 监听自定义事件名称aa ,并获取传递值-->
    <!--触发父组件info函数, $event获取传递的值2-->
    <hello @aa="info($event)"> </hello>
</div>

<script>
    // 注册全局组件
    Vue.component("hello",{
        data(){
            return {
           		 msg: 'HelloWorld'
            }
        },
        methods: {
        clicks(){
            //通过调用内建的 $emit 方法,并传入事件名称来触发这个事件
            //aa:自定义事件名 2:额外传递一个值,也可以不传
            this.$emit("aa",2)
        }
        }
        template: '<div> <input type="button" @click="clicks"> </div>'
    })


    new Vue({
        el: '#app',
        data:{
        },
        methods: {
            info(val){
                //接收子组件传递的值
                console.log(val);
            }
        }
        //局部组件注册 两种写法效果一致
        components:{
        }
    })
</script>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/4345.html

(0)
编程小号编程小号
上一篇 2023-08-06
下一篇 2023-08-05

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注