vue的基础知识总结

一、什么是vue?

1、渐进式框架,易用,灵活,高效,可以兼容其他框架

2、渐进式使项目由浅入深,由简单到复杂的方式进行开发

3、vue是双向数据绑定,不用操作DOM,即可改变页面,所以开发者能更好的的专注于业务逻辑

二、vue是基于虚拟DOM

vue是预先通过javascript进行计算,然后在将DOM渲染出来。因为这个DOM是预处理操作,并且没有真实的操作DOM,所以,叫做虚拟DOM

三、vue的基础知识

1、模板插值

 <div id="app">
        <h1>模板语法插值</h1>
        <!-- v-one 禁止修改值 -->
        <div v-once>v-one 禁止修改值:{{age}}</div>
        <!--可以修改值 -->
        <div>可以修改值:{{age}}</div>
        <!-- 插入html标签 -->
        <div>这是一个html标签:{{htmlmode}}</div>
        <div v-html="htmlmode"></div>
        <!-- 在模板使用表达式 -->
        <div>模板中使用表达式:{{age + age2}}</div>
 </div>
 <script type="text/javascript">
        var save_data = {
                age: 1,
                age2: 1,
                htmlmode: '<p style="color:red;">天下无双</p>',
            }
        var vm = new Vue({
            //选择实例化目标
            el: "#app",
            //存储数据
            data: save_data,
        })
        //改变data数据放的方式	
        vm.age = 2;
        save_data.age = 3;
        vm.$data.age = 4;
</script>

2、动态绑定属性

 <div id="app">
    <!-- 动态绑定属性 -->
    <a v-bind:href="websize">跳转到百度</a>
	<!-- 动态绑定样式 -->
	<div v-bind:class="fontColor">动态绑定样式</div>
	<!-- 表达式绑定class样式,可以多个绑定 -->
	<div v-bind:class="{styleColor:isColor,styleSize:isSize}">表达式绑定class样式</div>
	<!-- 数组内表达式绑定class样式,可以多个绑定 -->
	<div v-bind:class="['styleColor',isSize?'styleSize':'']">数组内表达式绑定class样式</div>
	<!-- 动态绑定行内样式 -->
	<div v-bind:style="{color:colVal,background:isbg?'black':''}">动态绑定style行内样式</div>
</div>
<script type="text/javascript">
        var save_data = {
            websize: 'https://www.baidu.com/',
            fontColor: 'styleColor',
            isColor: true,
            isSize: true,
            colVal: 'red',
            isbg: true,
        }
        var vm = new Vue({
            //选择实例化目标
            el: "#app",
            //存储数据
            data: save_data,
        })
</script>
<style>
    .styleColor {
        color: green;
    }
    .styleSize {
        font-size: 30px;
    }
</style>

3、条件渲染 v-if

 <!-- 单个条件渲染 -->
  <div id="app">
	 <div v-if="seeMe">你看不到我(不保留在dom中)</div>
	 <div v-show="seeSta">你看不到我(保留在dom中)</div>
	 <!-- 多个条件渲染 -->
	 <div v-if="keys == 1">满足条件1</div>
	 <div v-else-if="keys == 2">满足条件2</div>
	 <div v-else-if="keys == 3">满足条件3</div>
	 <div v-else>满足最后一个条件</div>
 </div>
 <script type="text/javascript">
        var save_data = {
            seeMe: false,
            seeSta: false,
            keys: 2,
        }
        var vm = new Vue({
            //选择实例化目标
            el: "#app",
            //存储数据
            data: save_data,
        })
</script>

4、列表渲染 v-for

1、可以遍历数组和对象,同时为了区分,每个遍历需要加上:key=“index”
2、注意value和index,一定要加上(),不然严格方式会报错

<div id="app">
	<ul>
	   <li v-for="(value,key) in pList" v-bind:key="key">
	   数组渲染:{{key}} - {{value.name}}
	   </li>
	</ul>
	<ul>
	   <li v-for="(value,index) in numList" v-bind:key="index">
	   对象渲染:{{index}} - {{value}}
	   </li>
	</ul>
</div>
<script type="text/javascript">
        var save_data = {
                pList: [
                {name: "johnli"}, 
                { name: "mark"}, 
                { name: "rose"}
                ],
                numList: {
                    name: 'rose',
                    sex: '女',
                    age: 18,
                },
            }
        var vm = new Vue({
            //选择实例化目标
            el: "#app",
            //存储数据
            data: save_data,
        })
</script>

5、事件处理

<div id="app">
      <button type="button" v-on:click="touchAct(1,$event)">
       点击次数:{{tuchCount}}
      </button>
</div>
<script type="text/javascript">
        var save_data = {
                tuchCount:0
            }
        var vm = new Vue({
            //选择实例化目标
            el: "#app",
            //存储数据
            data: save_data,
            methods: {
                touchAct: function(type, e) {
                    this.tuchCount++;
                }
            },
        })
</script>

6、表单双向绑定

<div id="app">
	<form>
        <div>
            <label>text表单:</label>
            <div><input v-model="inputVal"></div>
            <div>{{inputVal}}</div>
        </div>
        <div>
            <label>mark</label>
            <input type="checkbox" value="mark" v-model="checkboxVal">
            <label>rose</label>
            <input type="checkbox" value="rose" v-model="checkboxVal">
            <label>frank</label>
            <input type="checkbox" value="frank" v-model="checkboxVal">
            <div>{{checkboxVal}}</div>
        </div>

        <div>
            <label></label>
            <input type="radio" value="" v-model="radioboxVal">
            <label></label>
            <input type="radio" value="" v-model="radioboxVal">
            <div>{{radioboxVal}}</div>
        </div>
    </form>
</div>
<script type="text/javascript">
        var save_data = {
                inputVal: '',
                checkboxVal: [],
                radioboxVal: '',
            }
        var vm = new Vue({
            //选择实例化目标
            el: "#app",
            //存储数据
            data: save_data
        })
</script>

7、全局组件

(1)全局组件必须在vue实例化之前声明
(2)在任何地方都可以调用全局组件
(3)全局组件有两种内嵌式和单文件方式声明
(4)全局组件声明关键字

Vue.component()

<div id="app">
     <div>
         <head-model></head-model>
         <button-model titles="按钮2"></button-model>
         <button-model titles="按钮2"></button-model>
     </div>
</div>
<script type="text/javascript">
      //*
      //*第一种全局组件声明方式
      //*
      Vue.component("button-model", {
            //titles是组件传值
            props: ['titles'],
            //data必须是一个函数
            data: function() {
                return {
                    nums: 0
                }
            },
            template: '<div><button v-on:click="showMark">{{titles}}:{{nums}}</button></div>',
            methods: {
                showMark: function() {
                    this.nums++;
                }
            }
        })
        var vm = new Vue({
            //选择实例化目标
            el: "#app",
            //存储数据
            data: {}
        })
        
       //*
      //*第二种全局组件声明方式,单文件方式
      //
      import Head from './components/commen/Head';
      Vue.components('head-model',Head );
      new Vue({render:h=>h(App)}).$mount("#app")
        
</script>

8、局部组件

局部组件使用步骤:

(1)引入局部组件
(2)注册局部组件
(3)调用局部组件

<div id="app">
        <div>
          <test></test>
        </div>
</div>
<script type="text/javascript">
       //*
      //*第一种局部组件声明方式
      //*
        var vm = new Vue({
            //选择实例化目标
            el: "#app",
            //存储数据
            data: {},
            //局部组件
			components:{
				test:{
					template:"<h1>这是一个局部组件</h1>"
				}
			}
        })
</script>

<template>
    <div id="Foot">
        <!-- 3,调用局部组件-->
        <test/>
        <Test/>
        <md-test/>
    </div>
</template>
<script type="text/javascript">
       //*
      //*第二种局部组件,单文件方式
      //*
      //1,引入局部组件
      import test form '/components/test';
      exprot default{
            //选择实例化目标
            name: "Foot",
            //2,注册局部组件
			components:{
				test //第一种写法
				Test:test //第二种写法
				'md-test':test//第三种写法 
			}
        }
</script>

9、组件属性传值(父组件=>子组件)

(1)固定值传值,采用名值对。如:jyname是固定值传值
(2)变量传值,采用冒号+名=变量。如::marks=“markvalue”
(3)子组件不可直接修改父组件的值,需用通过注册事件(this.$emit())方式,返回到父组件修改

父组件
<template>
    <div id="app">
        //jyname是固定值传值
        //:marks 属性绑定传值
        //@setMarksPrent 来至子组件注册事件
        <HelloWorld :marks="markvalue" jyname="这是一个固定值" @setMarksPrent="updateMarks" />
    </div>
</template>

<script>
    import HelloWorld from './components/HelloWorld.vue'
    export default {
        name: 'App',
        data() {
            return {
                markvalue: '这是一个变量值'
            }
        },
        components: {
            HelloWorld
        },
        methods: {
            updateMarks: function (e) {
                this.markvalue = e;
            }
        }
    }
</script>
********************************************
子组件
<template>
    <div class="hello">
        <h1>{{ marks }}</h1>
        <h1>{{ jyname }}</h1>
        <button @click="setMarks">修改父组件marks的值</button>
    </div>
</template>

<script>
    export default {
        name: 'HelloWorld',
        props: {
            marks: {
                type: String
            },
            jyname: {
                type: String
            }
        },
        methods:{
            setMarks:function(){
                //注册事件
                //1,事件名称,2传值
                this.$emit('setMarksPrent','修改成功')
            }
        }
    }
</script>

10、生命周期钩子

<script type="text/javascript">
var vm = new Vue({
            //选择实例化目标
            el: "#app",
            //存储数据
            data: {},
            //生命周期
            //生命周期--1、实例化之后,数据data和event/watcher事件配置之前被调用
            beforeCreate: function() {
                console.log('beforeCreated');
            },
            //生命周期--2、实例创建完之后,挂在之前
            //这里完成以下配置:
            //(1)data
            //(2)属性和方法运算
            //(3)watch/event事件回调
            created: function() {
                console.log('created');
            },
            //生命周期--3、挂在之前,渲染函数首次被调用
            beforeMount: function() {
                console.log('beforeMount');
            },
            //生命周期--4、挂在成功,el被新创建的vm.$el替换
            mounted: function() {
                console.log('mounted');
            },
            //生命周期--5、数据变化之前
            beforeUpdate: function() {
                console.log('beforeUpdate');
            },
            //生命周期--6、组件DOM已经更新
            updated: function() {
                console.log('updated');
            },
            //生命周期--7、组件激活是调用
            activated: function() {
                console.log('activated');
            },
            //生命周期--8、组件停用时调用
            deactivated: function() {
                console.log('deactivated');
            },
            //生命周期--9、捕获来至子组件错误调用
            errorCaptured: function() {
                console.log('errorCaptured');
            },
            // //生命周期--10、销毁之前
            beforeDestroy: function() {
            	console.log('beforeDestroy');
            },
            // //生命周期--11、销毁之后
            destroyed: function() {
             	console.log('destroyed');
            }
        })
 </script>

11、插槽

1、多个插槽,父组件使用solot属性区别,子组件使用name属性区分
2、样式可以存放到父组件或者子组件
3、标签中有变量,必须在父组件中完成转化

<!-- 这是父组件 -->
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App">
        <!-- 多个插槽,name父组件使用solot属性区别,子组件使用name属性区分 -->
        <div slot="title">这是插槽标题</div>
        
        <!-- 标签中有变量,必须在父组件中完成转化 -->
        <div slot="mark">这是插槽备注说明:{{solt_mars}}</div>
        
        <!-- 作用域插槽 -->
        <template v-slot:title="values">
                <h2 >插槽标题:{{values.num}}</h2>
        </template>
    </HelloWorld>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'
export default {
  name: 'App',
  data(){
     return {
        solt_mars:'动态插槽内容'
     }
  },
  components: {
    HelloWorld
  }
}
</script>
*************************************************
这是子组件
<template>
  <div class="hello">
      <slot name="title"></slot>
      <div>这一个分界线</div>
      <slot name="mark"></slot>
      <slot name="title" :num="9527"></slot>    
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
}
</script>

12、动态组件和缓存

1,动态组件关键标签component :is=“动态组”
2,缓存关键组件keep-alive ,在keep-alive下的组件能够缓存数据

<template>
	<div class="index">
		<keep-alive>
			<component :is="showModel"></component>
		</keep-alive>
	</div>
</template>

<script>
	import One from '@/views/one.vue'
	import Two from '@/views/two.vue'

	export default {
		name: 'index',
		data() {
			return {
				showModel: 'Two'
			}
		},
		components: {
			One,
			Two
		}
	}
</script>
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值