Vue.filter("alltool", function (str) {
return str + "-alltool"
})
Vue.component("allbox", {
template: `全局组件`
})
Vue.directive("color", function (el, obj) {
el.style.color = obj.value
})
var vm = new Vue({
el: "#eg1",
data: {},
methods: {},
components: {
Box1: {
template: `
{{msg|box1tool}}
{{msg1|alltool}}
`,
data: function () {
return {
msg: "hello",
msg1: "全局过滤器",
}
},
methods: {
fn() {
console.log("组件的全部方法")
}
},
//局部过滤器 只能box1使用
filters: {
box1tool(str) {
return str + "box1-filter"
}
}
},
Box2: {
template: `
{{msg|box1tool}}
{{msg1|alltool}}
`,
//局部过滤器 box2中不能使用 只能box1使用
data: function () {
return {
msg: "world",
msg1: "全局过滤器",
}
},
},
}
})
结果显示:
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
lintOnSave:false//关闭eslint的严格模式检测
})
//引入src目录下的Nav1.vue文件
import Nav1 from "./Nav1.vue"
//可以写为
import Nav1 from "@/Nav1.vue"
import BoxDiv from "@/BoxDiv.vue"
单标签:
双标签:
props:["prop1","prop2"]
props: {
propA: Number, // 基础的类型检查 (`null` 匹配任何类型)
propB: [String, Number], // 多个可能的类型
propC: { type: String,
required: true // 必填的字符串
},
propD: { type: Number,
default: 100 // 带有默认值的数字
},
propE: { type: Object, // 带有默认值的对象或者数组填Array
default: function () { // 不建议直接填对象(因为对象直接量会一直占用内存),一般使用工厂函数,调用时才创建对象节省资源(面试)
return { message: 'hello' }
}
},
propF: {
validator: function (value) {// 自定义验证函数返回为true就代表数据符合我们规定
return ['success', 'warning', 'danger'].indexOf(value) !== -1
}
}
}
属性可以多传 但是注册了的属性就必须传 不然有可能会在使用时因为取值问题出BUG
属性名不要(不是不能)用vue官方或者原生标签已经签名过的名字:比如id class href
属性的类型验证只是一种验证提示 不会阻止程序运行
全局样式的写法:
注:如果全局样式出现了相同的选择器: 哪个是最后打包引入项目 哪个的优先级就最高(就近原则)
注:vue文件中可以出现多个style标签 凡是添加了scoped属性的,里面的选择器就会被修改 没添加scoped属性的就不会被修改
1、 @ 是一个关键字,在引入的文件路径中 它代表src目录
2 、template:组件的模板中只能有一个根节点
3 、v-slot: 插槽, 具名插槽 slot,slot-scope过时了 2.6.0使用v-slot 语法:v-slot:插槽名 语法糖:#插槽名 没有指定插槽名就是默认插入到插槽,不给插槽插入数据的话,就会使用组件的slot标签的尖括号中的数据 插槽名不用使用引号引起来,直接写变量名 插入的内容必须是template标签或者组件 不能是原生的元素
4、 组件的data为什么是个函数然后返回对象,以前使用vm时都是个对象
组件和挂载到界面的vm对象的区别,vm挂载到页面上时,触发了钩子函数的,data生成了,页面上使用的数据就是data容器中渲染上去的,而且页面只有一个vm对象,所以的vm生成完毕(mouted)时data必须存在
组件是引入和注册以后不一定使用的,比如for循环0次就是组件对象生成了的,但是使用0次,所以组件对象并没有使用自己的data容器去渲染数据,造成资源浪费,解决方案就是懒加载:当使用data时去调用,才生成data对象
组件的data 设计成function的用义:组件可以多次使用,每使用一次,函数被调用一次则创建出不同的数据对象,实现同名组件的数据可以相互独立
5、 scoped: style标签的scoped="scoped" 生成css的使用作用域只有当前组件内部的选择器生效