②vue-基础语法(上)
一、vue中应用和组件的基础概念
- createApp 表示,创建一个Vue应用,存储到app变量中;
- 传入的参数表示,这个应用最外层的组件应该如何展示;
- MVvM 设计模式:
- m -> model 数据;
- v -> view 视图;
- vm -> viewModel 视图数据连接层;
const vm = app.mount("#root");
:vm代表的就是Vue应用的根组件,也是视图数据连接层;console.log(vm.$data.message)
:在根组件上,调用$data,可以操作数据;
二、vue中的生命周期函数
- 生命周期函数:某一时刻自动执行的函数
beforeCreate()
:在实例生成之前,自动执行;created()
:在实例生成之后,自动执行;- 若参数中含有
template:'';
- 则将
template:'';
编译成render()
函数,再继续执行beforeMount()
;
- 则将
- 若参数中没有
template:'';
- 则将 id=”#root” 节点的 innerHTML 当做
template:'';
编译成render()
函数,再继续执行beforeMount()
;
- 则将 id=”#root” 节点的 innerHTML 当做
- 若参数中含有
beforeMount()
: template 模板被编译成 render 函数后(组件被渲染到页面前),自动执行;mounted()
:template 模板背编译成 render 函数后,且将 render 函数渲染完成后(组件被渲染到页面后),自动执行;beforeUpdate()
:数据发生改变时,自动执行;updated()
:数据发生改变,且页面更新完,自动执行;- 执行
app.unmount()
,在 #id=”root” 节点上,销毁Vue应用;
- 执行
beforeUnmount()
:执行app.unmount()
时,且DOM销毁前,自动执行;unmounted()
:执行app.unmount()
后,且DOM销毁后自动执行;
三、常用模板语法
v-html='message'
:在所属的标签上,以 HTML 方式展示 ‘message’ 变量,避免了 产生的对 message 的转译;template: "<div v-html='message'></div>"
v-once='message'
:标签使用 v-once 指令后,只在第一次使用该变量时,进行所属标签与该变量绑定,之后就不与该变量绑定了;- 降低无用渲染,提高渲染性能;
template: "<div v-once='message'>{{message}}</div>"
- 动态参数;
- 动态参数:
@[event]:"handleClick"
,其中 event 需在 data(){return {event: “click”}} 中定义; - 动态参数:
:[name]:"message"
,其中 name 需在 data(){return {name: “title”}} 中定义;
- 动态参数:
- 修饰符:
@click.prevent="handleClick"
:阻止点击的默认行为事件;
1 | template: `<form action="https://www.baidu.com" @click.prevent="handleClick"> |
四、数据、方法、计算属性、监听器
- data :
vm.$data.message
=vm.message
- 是因为 message 为 data(){return {message:”444”}} 直接返回的根数据;
- methods :
- 只要页面重新渲染,就会重新执行里面的所有方法;
- methods 里面的函数中若要使用 this;
- 则不能使用箭头函数;
- 是因为箭头函数中的 this 不被自动绑定到Vue实例上,而是指向向上级寻找到的对象;
- 若使用普通函数;
- this 会被自动绑定到Vue的实例上;
- 则不能使用箭头函数;
- methods 里面的方法可以在插值表达式中使用
template: "<div>{{formatString(message)}}</div>"
methods:{formatString(string) {return string.toUpperCase()}}
- computed:
- 只有在计算属性依赖的属性值发生变更时,才会重新计算;
- 计算属性依赖的属性值未发生改变,不会重新计算;
- 故,计算属性有缓存机制,做页面渲染更高效;
- computed 里面的方法可以在插值表达式中使用
template: "<div>{{total}}</div>"
computed:{ total(){return this.count * this.price} }
- watch:
- 可以做异步操作,同步操作时,computed更简洁;
- 当 data 中的 ‘xxx: yyy’ 数据放生变化时,watch 中相应的 xxx(current, prev){} 函数就会执行;
- computed分别于methods/watch对比
- computed对比methods
- 当 methods 、 computed 同时可以用的时候,优先选用 computed ,因为有缓存;
- computed对比watch
- 当 watch 、 computed 同时可以用的时候,优先选用 computed ,因为更加简洁;
- computed对比methods
五、样式绑定语法
1 | /* 该 css 为以下三个样式举例的通用 css ; */ |
1、分别用字符串、对象、数组控制样式
1 | <script> |
2、子组件继承父组件样式的2种情况
1 | <script> |
3、行内样式的几种写法
1 | <script> |
六、条件渲染
v-if
和v-show
区别:v-if
:若为 false ,将 DOM 移除;v-show
: 若为 false ,将 DOM 的style="display: none"
;
v-if
、v-else-if
、v-else
的使用:
1 | const app = Vue.createApp({ |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Thales!
评论