赞
踩
在GitHub上搜索 vue-next,下载源代码( git clone 到本地)
安装Vue源码项目相关的依赖;
yarn install
对项目执行打包操作(执行前修改脚本package.json)
yarn dev
通过 packages/vue/dist/vue.global.js 调试代码(在vue/examples中写例子)
{{}}
v-once
v-text
v-html
v-pre
v-cloak
这个指令保持在元素上直到关联组件实例结束编译。
和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到组件实例准备完毕。
v-bind(属性)
语法糖: :
动态绑定属性
动态绑定class
动态绑定style
v-on(事件)
语法糖: @
修饰符
如果一次绑定多个事件,可以传入一个对象
原生事件event参数:使用**$event**可以传参
methods方法不能使用箭头函数:
箭头函数的this指向父级作用域的上下文(window),而不会指向组件实例,在不使用箭头函数情况下 this绑定的是该vue组件实例
v-for
in、of均可 一般使用in
可以遍历数组和对象
key的作用 – diff算法源码【packages\runtime-core\src\renderer.ts – PatchChildrenFn】
key
特殊 attribute 主要用做 Vue 的虚拟 DOM 算法的提示,以在比对新旧节点组时辨识 VNodes(虚拟节点)。v-if
v-show
v-model
表单元素上的双向绑定数据
input\textarea
select
单选 – 对应选中的option的value值
多选 – 数组[option的value的值]
checkbox
radio – 选中值为value的值
修饰符
.lazy (本质: input => change)
.number
trim(去除输入的值两边空格)
data()
watch – 侦听器
注意(官网):当变更(不是替换)对象或数组并使用 deep 选项时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。Vue 不会保留变更之前值的副本。 – 浅拷贝
使用:
data() { return { book: { name: "红宝书", price:100, class: {name: 'javascript'} }, friends: [ {name: "aaa"}, {name: "bbb"} ] } }, watch: { //默认情况下只会针对监听的数据本身的改变(内部发生的改变是不能侦听) book(newValue, oldValue) { // book ---侦听的data中的属性的名称 // newValue ---变化后的新值 // oldValue ---变化前的旧值 //do something... } //配置选项; book: { handler: function(newValue, oldValue) { //do something... }, deep: true, // 深度侦听 immediate: true // 立即执行 } //侦听某个属性: "book.name": function(newName, oldName) { console.log(newName, oldName); }, "friends[0].name": function(newName, oldName) { console.log(newName, oldName); }, }
$watch
computed – 计算属性 有缓存
methods – 无缓存
关于深拷贝浅拷贝:
- 1、Object.assign({},obj):
- 浅拷贝 — 如果obj中某个属性的值是对象,那么拷贝得到的是对这个对象的引用
- 2、深拷贝方法:
- lodash
- JSON.parse(JSON.stringify(obj))
app.vue: 根组件
<div id="app"></div>
<template id="my-app">
{{message}}
</template>
vue.createApp({
template: "#my-app",
data() {
message: "哈哈哈"
},
methods: {},
}).mount("#app")
组件注册
注册全局组件
app.component('组件名称', {组件对象})
注册局部组件
通过components属性选项来进行注册
该components选项对应的是一个对象,对象中的键值对是 组件的名称: 组件对象
比如app这个全局组件中,可以这样使用:
vue.createApp({
ComponentA: ComponentA
}).mount("#app")
组件名称定义:
当使用 kebab-case (短横线分隔命名) 定义一个组件时,引用该自定义组件时,也必须用 kebab-case,例如 :
app.component('my-component-name',{})
当使用 PascalCase (首字母大写命名) 定义一个组件时,你在引用这个自定义元素时两种命名法都可以使用。也就是说 和 都是可接受的:
app.component('MyComponentName',{})
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。