- setup 函数的执行时机是在 beforeCreate 和 created 之间;
- 由于 setup 执行时机是在 created 之间,所以组件才刚刚被创建,而 data 和 methods 还没初始化好,所以无法在 setup 中使用 data 和 methods;
- setup中 this 指向 undefined;
- setup 只能是同步的,不能是异步的;
vue script setup 添加响应式属性
// 首先引入 vue 的 ref 方法
import { ref } from "vue";
const data = ref({a:999})
响应式的主要作用还是有些迷糊,理解的地方是,响应式代表,所有引用到这个数据的程式,都会在该数据发生变化时,作出相应的变化。
不理解的是, const d=def(0)
有必要吗?根据早前的开发经验,cons
t data={a:9} ,运行时在 data 中添加了新的属性,这时无法触发变化,所以需要用到响应式。
vue script setup 带默认值的 props 配置
<script setup>
const props = defineProps({
index:{
type: Number, // 强制数据类型
default: 1, // 默认值
required: false, // 不是必需
validator: value=>{ // 验证
return value>=0
}
},
msg: 'hello',
labels: () => ['one', 'two'],
foo: "ddd"
})
ES6 import、export 和 export default
例如要在文件 A.js 中通过 import 语法来引用 B.js
export default 仅可以导出一个,对应的import导入时候不用加花括号,且可以自由命名。
如:import B from './B'
export 可以导出多个,导入时需要使用花括号指定需要导入的内容,且需要与 B 文件中导出的名称匹配,可以使用AS
进行别名,如import { myA as myX, Something as XSomething } from './B'
我们可以把 B.js 看作是一个类(class) ,而 export default 则表示这个类是完全公开的,而 export 则是开放指定的内容。
Vuejs 中的自定义 html 标签使用
vuejs 中 html 标签如果不是标准的 html 标签如(div,span,p,a,…)等等,就会被假定为 vue 组件,然后就会到注册库中寻找该组件,当找不到该组件时就会出错。
有时候我们需要使用一些自定义的标签,但却不是当作组件来用,例如我们想要定义一个 html 标签为 `<uni-head>` ,却不是一个组件,此时,我们只需要在 vue 的忽略配置中加上如下语句,vuejs 就会忽略这个标签了。
Vue.config.ignoredElements = ['uni-head'];
V.sync 功能详解
am-vuejs 中的 V.sync( obj,option )
有两个参数,参数一为当前组件对象,参数二为需要关联属性的对象或数组。
vuejs 子组件调用父组方法的定义
很多时候,我们的子组件作用有所不同,因此我们需要用相同的数据结构,而使用父组件中的方法来进行执行。
它们之间的关系不是很复杂,我们需要进行以下设置,就可以做到了
1.首先,在引用子组件时定义 v-on 属性,假如我们的子组件名称为 am-operation
,而父组件也就是当前组件中要给到子组件的方法为parentMethod
,那么代码如下
<am-operation v-on:callback="parentMethod"></am-operation>
注意:parentMethod
正是父组件中的方法。
2.然后,我们在子组件的模板部分需要调用的地方添加如下代码
<am-button type="success" lagel="提交" @click="childrenMethod( attr1,attr2 )"></am-button>
注意:此处 childrenMethod 为子组件中的方法。
3.最后,我们需要在子组件的 methods
中添加对应的 childrenMethod
方法如下
Vue.component('am-menu-operation', {
// ......
methods:{
childrenMethod( attr1,attr2 ){
this.$emit( 'callback',attr1,attr2 );
}
}
}
注意:重点就在 this.$emit
,而callback 正是 v-on:后定义的方法名称
vuejs 中的数据变化监测
数据
data: function(){
return {
a: true,
b: {
c:1,
b:2
}
}
}
监测数据 a 的变化
watch: {
a:function(newValue, oldValue) {
console.log(newValue)
}
},
监测数据 b.c 的变化 ,可以通过 computed 做中间层来指定对象属性
computed: {
bc() {
return this.b.c;
}
},
watch: {
bc(newValue, oldValue) {
console.log(newValue)
}
},
其它方法,这是 vuejs api 中介绍的方法
// 键路径
vm.$watch('a.b.c', function (newVal, oldVal) {
// 做点什么
})
am-vuejs 穿越型组件
穿越型组件,指在 element-ui 的组件基础上增加了一定的组装配置后形成的新的组件,一般都是表单,由于其v-model 模式中间需要一层组件过度,因此称为穿越型,特点是需要配置两个标准属性
- dataObject:组件对应的是哪个表单数据对像
- dataName: 对应表单数据对象的数据名称是。
vue请求数据放在created好还是mounted里好
建议放在created里 created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。 mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。
如果在mounted钩子函数中请求数据可能导致页面闪屏问题 其实就是加载时机问题,放在created里会比mounted触发早一点,如果在页面挂载完之前请求完成的话就不会看到闪屏了
一般使用 created 比较多,如果需要严禁的区别的话,我们可以这样理解,如果请求的数据,对结果 dom 是有影响的,那么建议放到 created 中,如果请求的数据是与 dom 无关的,那么可以话在 mounted 中
这样说,一个组件是通过某个数据来渲染 dom 的,那么必然应该将 数据放在 created中加载,但有一种情况,我们创建了一个 chat ,其中一些数据是需要 chat 渲染完毕后才产生作用的,就可以放在 mounted 中。