Skip to the content.

知识笔记总结

js基础知识

Math方法

标识符,作用域,预解析,闭包

定时器

数组的方法

字符串方法

面向对象

日期对象

正则表达式

BOM

DOM

ES6

git命令

jQuery

js兼容性

Node.js

promise

React

vue路由

本地服务建立

饿了么element组件

面试题集合

面试总结

更多面试题分类集锦

css篇

三栏布局总结

flex布局详解

CSS布局说——可能是最全的

谈谈PostCss

js篇

js类继承模拟

正则表达式详解 js

js的事件循环

ES6常用知识点概述

前端——影子杀手篇

框架篇

Redux学习笔记(一)

react生命周期的艺术

react diff算法

react context解析

前端框架模式的变迁

nodeJS篇

nodeJS模块整理

性能篇

网页性能优化漫谈(一)

网页性能优化漫谈(二)

网页性能优化漫谈(三)

网页性能优化漫谈(四)

前端性能优化常用总结

http篇

浏览器缓存篇

算法篇

算法题解

前端 排序算法总结(一)

前端 排序算法总结(二)

前端实践篇

瀑布流列表的下拉刷新和上拉加载实现(上)

瀑布流列表的下拉刷新和上拉加载实现(下)

移动端富文本实践篇(一)

移动端富文本实践篇(二)

移动端富文本实践篇(三)

移动端富文本实践篇(四)

面试总结篇

面试题总结(一)

js 面试题总结(一)

感悟篇

回顾半年——应对前端疲劳

Vue知识总结

data

每个 Vue 实例都会代理其 data 对象里所有的属性

let a = 1;
let b = { num:100 }

let vm = new Vue({
    el:'#box',
    data:{
        n:a,
        m:b
    }
})

vm.n = 9;
console.log(vm.n)//9
console.log(a)//1

a = 5;
console.log(vm.n)//9
console.log(a)//5
//如果是简单类型的值,实例化后再改变其值,并不会改变data中应用该值时的值。

console.log(vm.m.num)//100
vm.m.num = 999;
//b.num = 999;
console.log(vm.m.num)//999
console.log(b.num)//999
//不管先改data中的数据还是先改data引用的数据,都会影响整体数据,发生相同的结果。
	</script>

v-if和v-show

<div id="box">
    <div v-show="tab">v-show</div>
    <div v-if="tab">v-if</div>
    <input type="button" @click="tab = !tab" />
</div>

new Vue({
    el:"#box",
    tab:true
})

v-if:为true时:结构显示; 为false时:结构在HTML中消失,找不到了; v-show:为true时:display:block; 为false时:结构还在,只是display:none;了

v-if

v-if是条件渲染指令,它根据表达式的真假来删除和插入元素

语法:v-if=”expression”

<body>
    <div id="app">
        <h1>Hello, Vue.js!</h1>
        <h1 v-if="yes">Yes!</h1>
        <!--引用data中的yes属性属性值为true所以显示-->
        
        <h1 v-if="no">No!</h1>
        <!--引用的属性值为false所以不渲染-->
        
        <h1 v-if="age >= 25">Age: </h1>
        <!--js表达式返回true所以渲染-->
        
        <h1 v-if="name.indexOf('jack') >= 0">Name: </h1>
        <!--js表达式返回false所以不渲染-->
    </div>
</body>
    
var vm = new Vue({
    el: '#app',
    data: {
        yes: true,
        no: false,
        age: 28,
        name: 'keepfool'
    }
})
为什么Vue实例可以直接访问定义在选项对象的data属性呢?这是因为每个Vue实例都会代理其选项对象里的data属性

如果v-if返回的值是false,则该标签不会进行渲染,结构中没有该结构

v-show

如果上面的v-if的结构中,把v-if换成v-show,会出现相同的界面,但是实现原理却不相同,v-show是通过css属性中的display控制block和none来时实现的

v-else

可以用v-else指令为v-if添加一个“else块”。v-else元素必须立即跟在v-if元素的后面——否则它不能被识别。v-else不需要写表达式,只需要写c-else即可

<h2 v-if="status">if标题h2</h2>
<h2 v-else>else标题h2</h2>

new Vue({
el:'#bo',
data:{
	status:false
})

------------结果为-------------
//else标题h2

只有当v-if中的表达式返回的值为false时,才会执行v-else,

v-bind

属性不能使用双大括号形式绑定,只能使用v-bind指令

预期值

如 v-bind:class=”classProperty” 中,v-bind 是指令,: 后面的 class 是参数,而 classProperty 则在官方文档中被称为“预期值”

支持单一的js表达式(v-for 除外)

<div id="app">
    <p v-bind:title="t1 + ' ' + t2">html属性不能使用双大括号形式绑定只能使用v-bind指令</p>
</div>

var vm = new Vue({
    el: '#app',
    data: {
        t1: 'title1',
        t2: 'title2'
    }
})

------结果为--------
<div id="app">
    <p title="title1 title2">html属性不能使用双大括号形式绑定只能使用v-bind指令</p>
</div>
<div id="app">
    <p v-bind:title="getTitle()">html属性不能使用双大括号形式绑定只能使用v-bind指令</p>
</div>

var vm = new Vue({
    el: '#app',
    data: {
        getTitle: function () {
            return 'title content';
        }
    }
})
---------结果为------------
<div id="app">
    <p title="title content">html属性不能使用双大括号形式绑定只能使用v-bind指令</p>
</div>

支持的数据类型

<div id="app">
    <p v-bind:title="obj">content</p>
</div>

var vm = new Vue({
    el: '#app',
    data: {
        obj: {}
    }
}
-------结果为-----------
<div id="app">
    <p title="[object Object]">content</p>
</div>

属性值是对象obj的toString方法的返回值。 如果改变了对象obj的toString方法的返回值,响应的title属性值就会发生变化。如:

let ob = {};

ob.toString = function(){
    return 'abcd'
}

var vm = new Vue({
    el: '#app',
    data: {
        obj: ob
    }
}
-------结果为-----------
<div id="app">
    <p title="abcd">content</p>
</div>
<div id="app">
    <p v-bind:title="arr">content</p>
</div>

var vm = new Vue({
    el: '#app',
    data: {
        arr: [1, 2, 3]
    }
})
--------=--结果为-----------
<div id="app">
    <p title="1,2,3">content</p>
</div>

调用的是数组的tostring方法。将每一项用逗号连接。

<div id="app">
    <p v-bind:title="num">content</p>
</div>

var vm = new Vue({
    el: '#app',
    data: {
        num:999
    }
})
--------结果为-----------
<div id="app">
    <p title="999">content</p>
</div>

把数字转为字符串类型后进行调用,数字0也会转为字符串0

<div id="app">
    <p v-bind:title="boo">content</p>
</div>

var vm = new Vue({
    el: '#app',
    data: {
        boo:false
    }
})
--------结果为-----------
<div id="app">
    <p>content</p>
</div>

如果是布尔类型,值如果为false,则不会渲染出队形的title=”false”,但是如果为true。则会出现对应的属性值

<div id="app">
    <p v-bind:title="boo">content</p>
</div>

var vm = new Vue({
    el: '#app',
    data: {
        boo:true
    }
})
--------结果为-----------
<div id="app">
    <p title="true">content</p>
</div>

vue对class和style的增强

基于对象对class的增强

<div class="box">
	<p :class="tit" v-for="item,index in list">这是</p>
</div>

let obj = {
	cla:true,
	cla2:false,
	cla3:'true',
	cla4:'false'
}
obj.toString = function(){
	let str = ''
	for(var attr in obj){
		if(obj[attr]){
			str+=obj[attr]+' ';//转为字符串进行拼接,后面加空格
		}
	}
	return str;
};
// 防止 toString 方法自身被遍历出来
Object.defineProperty(obj,'toString',{'enumerable':false})
new Vue({
	el:'.box',
	data:{
		list:[
			1,2,3,4,5
		],
		tit:obj//如果是对象,他会调用对象的toString方法,把它转为字符串类型
	}
})
-----------结果为------------
<p class="cla cla3 cla4">1这是0</p>
...

基于数组对class的增强

<div id="app">
    <p v-bind:class="arr">content</p>
</div>

var arr = ['c1', 'c2', 'c3'];

arr.toString = function () {
    return this.join(' ');//调用数组的join方法,通过空格连接
};

var vm = new Vue({
    el: '#app',
    data: {
        arr: arr
    }
});
--------结果为----------
<div id="app">
    <p class="c1 c2 c3">content</p>
</div>

基于对象对style的增强

<div class="box">
	<p :style="tit" v-for="item,index in list">这是</p>
</div>

let obj = {
	background:'orange',
	color:'#fff'
}
obj.toString = function(){
	let str = ''
	for(var attr in obj){
		if(obj[attr]){//判断是否有属性值
			str+=attr +':'+ obj[attr] +';'
		}
	}
	return str;
};
new Vue({
	el:'.box',
	data:{
		list:[
			1,2,3,4,5
		],
		tit:obj
	}
})
---------结果为----------
<p style="background: orange; color: rgb(255, 255, 255);">1这是0</p>

基于数组对style的增强

<div id="app">
    <p v-bind:style="arr">content</p>
</div>

<script>
var arr = [{
        color: "red"
    }, {
        backgroundColor: '#ddd'
    }, {
        fontSize: '20px'
    }];

arr.toString = function () {
    var str = '';
    arr.forEach(function (val, key) {
        for(var i in val) {
            str += i + ':' + val[i] + ';';
        }
    });
};

var vm = new Vue({
    el: '#app',
    data: {
        arr: arr
    }
})
------结果为------------
<div id="app">
    <p style="color: red; background-color: rgb(221, 221, 221); font-size: 20px;">content</p>
</div>

触发事件

<div id="box">
    <div v-show="tab"></div>
    <div v-if="tab"></div>
    <input type="button" @keydown.13="fn" />
    <input type="button" @keydown.13="fn(1)" />
    <input type="button" @keydown.13="fn(1,$event)" />//$event表示事件对象
</div>

new Vue({
    el:"#box",
    tab:true,
    methods:{
        fn(n,ev){
            console.log(n);
            console.log(ev);
        }
    }
})

vue中事件出发的时候,可以选择性的传入参数。.13代表回车enter。 以上代码第一个button点击的时候,执行的函数是未传入参数的fn,console打印的n是事件对象; 第二个button点击的时候,虽然带了小括号,但是并不会直接执行,打印的n是1; 第三个button点击的时候,n是第一个参数,所以是1,ev是事件对象;

$refs

行间写 ref = ‘abc’

判断是否添加类名

全局组件component

定义组件:Vue.component

Vue.component('组件名',{选项对象})
Vue.component('abc',{
    template:'<h3>这是标题</h3>'
})

template模板中只能有一个根元素,就是只能多个元素被一个元素包裹

第一个参数是组件名, 1. 直接写单词,单词不能是HTML已有的HTML标签。 2. 可以使用驼峰命名法,但是在el规定区域内使用的时候,必须使用烤串命名法, 如:component组件名为itemName,el区域内使用的时候不能写itemName,只能写item-name. 3. 直接使用烤串命名法, 如:如:component组件名为item-name,el区域内使用的时候直接写item-name.

第二个参数是这个组件的选项对象,用来配置这个组件的template,定义组件的模板。

组件的data — 内部数据

Vue.component('abc',{
    template:`
        <div>
            <input type="button" v-model="n" @click = "n++" />
        </div>
    `,
    
    data:function(){
        return {
            n:0
        }
    }
})

组件的data数据存放在组件的选项对象中,且data必须是一个函数,函数必须return出一个对象,否则警告。

组件的props — 内部数据

<div id="box">
    <abc title="123"></abc>
</div>

Vue.component('abc',{
    template:`
        <div>
            <input type="button" v-model="n" @click = "n++" />
            
        </div>
    `,
    
    props:['title'],
    
    data:function(){
        return {
            n:0
        }
    }
})

new Vue({
    el:'#box'
})

事件修饰符

按键修饰符

局部组件components

生命周期

分三个阶段

  1. 创建阶段