Vue.js(八)

欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot

ES6

var:变量值可以改变,没有if和for块级作用域(可以通过闭包函数作用域解决)

let:变量值可以改变,有if和for块级作用域

const:变量值不变

JS函数

普通函数:

	1)声明函数:function funcName(){};

	2)函数表达式:var add = function(){};


匿名函数:

	1)变量赋值:直接通过 name() 进行调用。

		var add = function (a,b){
			console.log(a + b);
		}
		add(1,2);

	2)自执行函数:使用小括号进行包裹匿名函数,在小括号后面加小括号进行调用。

		(function (){
			console.log(1)
		})()

JS高阶函数

for(let i in list):i代表下标

for(let item of list):item代表元素

函数式编程:

	filter / map / reduce

	nums.filter(function(n){return})	//过滤

	nums.map(function(n){return})	//遍历处理

	//initialValue可选,如果数组为空且未提供initialValue,将抛出TypeError异常。
	nums.reduce(function(previousValue,n){return previousValue + n}, initialValue)	//汇总

箭头函数:=>

组件化开发(无论全局组件还是局部组件都需要在new Vue挂载的实例下才能使用)

1. 创建一个组件构造器:const cpnc = Vue.extend({template:`<div></div>`})

2. 注册组件:
	
	全局组件:
		Vue.component("my-cpn", cpnc)	//原生写法

		Vue.component("my-cpn", {template:`<div></div>`})	//语法糖简写

	局部组件:
	    const app = new Vue({
	        el:"#app",
	        data:{},
	        components:{
	            "my-cpn":{template:`<p>你好</p>`}
	        }
	    })

3. 使用组件:<my-cpn></my-cpn>


父子组件(1是父组件,2是子组件):

	const cpnc2 = Vue.extend({
		template:`<div></div>`
	})

	const cpnc1 = Vue.extend({
		template:`<div><cpnc2></cpnc2></div>`, 
		components:{"cpnc2":cpnc2}
	})

	Vue.component("cpnc1", cpnc1)


父传子(Vue对象中的数据传到子组件中)(通过props进行数据绑定):

	Vue.component("my-cpn", {
		data:function(){   //一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝(不是同一个对象)
			return {
				count: 0
	 		}
		},

		template:`<button @click="increment">{{ name }}</button>`,

		props:['name'],	//方式一
		props:{	//方式二
			name:String,	//类型限制
			age :[Number,Object],	//多种类型限制
			address:{
				type:String,	//类型限制
				default:'',	//字符串默认值
				default(){return []},	//对象或者数组默认值(必须是函数形式)
				required:true
			}
		}

		methods:{
			increment(){},
			decrement(){}
		}
	})

	父组件使用:
		<my-cpn :name="name"></my-cpn>:绑定父组件name变量
		<my-cpn name="name"></my-cpn>:绑定name字符串


子传父(子组件中的数据传到Vue对象中)(通过$emit进行自定义事件绑定):

    const app = new Vue({
        el: "#app",
        data: {
            name: "ld",
            password: "aaa"
        },
        methods: {
            cpnclick(item) {
                alert(item);
            }
        },
        components: {
            "ld": {
                template: `
                    <div>
                        <button v-for="item in cate" @click="btnclick(item)">
                            {{item.name}}
                        </button>
                    </div>`,
                data() {
                    return {cate: [{id: "l", name: "sara"}, {id: "d", name: "ld"}]}
                },
                methods: {
                    btnclick(item) {
                        //发射事件:自定义事件
                        this.$emit('item-click', item)
                    }
                }
            }
        }
    })

	父组件使用(绑定父组件cpnclick方法):
		<div id="app">
			<ld @item-click="cpnclick"></ld>
		</div>


父访问子:

	this.$children[0]:获取子组件对象

	this.$refs.ld:获取子组件对象(需要在组件上添加属性:<cpn ref="ld"/>)

访问根组件:$root

$event:代表原生事件对象

$event.targer.value

<button @click="fun('data', $event)">
  Submit
</button>

methods: {
  fun: function (message, event) {
    // 现在我们可以访问原生事件对象
    if (event) {
      event.preventDefault()
    }
    alert(message)
  }
}

slot 插槽

模板中预留插槽:
	<slot>默认值</slot>

自定义标签中添加内容:
	<spn>自定义内容</spn>


具名插槽(可以添加多个插槽):
	
	<slot name="left">默认值</slot>
	<slot name="right">默认值</slot>
	
	<spn>
		<span slot="left">自定义值</span>
		<span slot="left">自定义值</span>
	</spn>


作用域插槽:

	<slot :data="data">默认数据处理:{{ data }}</slot>
	
	<spn>
		<template slot-scope="slot">自定义值处理:{{ slot.data }}</template>
	</spn>
posted @ 2019-12-25 23:29  LittleDonkey  阅读(236)  评论(0编辑  收藏  举报