基于MVVM设计模式的渐进式的纯前端js框架
(1). MVVM?
(2). 渐进式: 不要求整个项目都用vue做,可以轻松和别的技术混搭,且会多少就可以先用多少!
(3). 纯前端js框架: 与nodejs无关!单靠浏览器就可运行!
(4). 框架:
条件渲染:v-show v-if v-else v-else-if
元素节点渲染 v-text v-html
循环渲染 v-for
行为绑定 v-on v-bind v-model v-slot v-pre v-cloak v-once
<div id="app">
<!--希望遍历data中一个对象的每个属性,反复生成多个相同结构的HTML元素-->
<ul>
<li v-for="(value,key) of ym" :key ="key">{{key}} : {{value}}</li>
</ul>
</div>
<script>
var vm=new Vue({
el:"#app",
data:{
ym:{
math:89,
chs:69,
eng:91
}
}
})
</script>
如果给每个元素都绑定:key="i"属性,则每个HTML元素上都有一个【唯一的标识】key=“0” key=“1” … 。【当将来修改了数组中每个位置的元素时,只需要修改对应key的HTML元素即可】,其他HTML元素保持不变!——效率高!
坑: 如果v-for遍历的是数组时,在程序中通过下标修改数组元素值,页面上的HTML元素不会自动更改!
比如: this.teachers[0]=“燕儿” 页面上是不会变的!
原因:因为数组中的数字类型的下标012…【无法添加访问器属性,也就不受监控】!
解决: 今后,vue中修改数组中的元素值!必须用【数组家函数!才能自动更新页面。因为函数都是受监控的】。
比如: this.teachers.splice(0,1,“燕儿”)
删除0位置的1个元素,再在0位置放入"燕儿"
结果: 页面会自动变化!
Vue.js 允许你自定义过滤器,可被用于一些【常见的文本格式化】。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:
html中
<!-- 在双花括号中 -->
{{ message | capitalize }}
<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>
选项对象中定义局部过滤
filters: {
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
或者在创建 Vue 实例之前全局定义过滤器:
Vue.filter('capitalize', function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
})
new Vue({
// ...
})
r o u t e 是 一 个 跳 转 的 路 由 对 象 , 每 一 个 路 由 都 会 有 一 个 r o u t e 对 象 , 是 一 个 局 部 的 对 象 。 可 以 获 取 对 应 的 n a m e 、 p a t h 、 q u e r y 、 p a r a m s 等 ( < r o u t e r − l i n k > 传 的 参 数 由 t h i s . route是一个跳转的路由对象,每一个路由都会有一个 route 对象,是一个局部的对象。可以获取对应的 name、path、query、params 等(
r o u t e r 为 通 过 V u e . u s e ( V u e R o u t e r ) 和 V u e R o u t e r 构 造 函 数 得 到 的 一 个 r o u t e r 的 实 例 对 象 , 这 个 对 象 是 一 个 全 局 的 对 象 。 想 要 导 航 到 不 同 U R L , 则 使 用 router为通过 Vue.use(VueRouter) 和 VueRouter 构造函数得到的一个 router 的实例对象,这个对象是一个全局的对象。想要导航到不同 URL,则使用 router为通过Vue.use(VueRouter)和VueRouter构造函数得到的一个router的实例对象,这个对象是一个全局的对象。想要导航到不同URL,则使用router.push方法;返回上一个 history 也是使用$router.go方法
先说明一下 set方法是监视,是监视,是监视.
get方法是读取方法中返回的值,
beforeCreate是获取不到props子组件或者data中的数据
created钩子函数:可以访问到之前不能访问的数据,但是组件还没有被挂载【能访问但是看不到】
beforeMount钩子函数: vue实例的el和data都初始化完了,但是挂载的还是虚拟DOM
mounted 钩子函数: 实例挂载完成,数据渲染成功
beforeUpdate /updated钩子函数: 分别在数据更新前和更新后会调用。
beforeDestroy钩子函数: vue 实例已经解除了事件监听以及dom 的绑定,但是dom 结构依然存在
destroyed钩子函数: 所有子组件都销毁完毕后才会执行根组件的 destroyed 钩子函数。
computed 是计算属性,【依赖其他属性计算值】,并且 computed 的值【有缓存】,只有当计算值变化才会返回内容。
watch 【监听到值的变化就会执行回调】,在回调中可以进行一些逻辑操作。
v-show : 只是在 display: none 和 display: block 之间切换 .DOM 还是一直保留着的, 更适合于频繁切换的场景。
v-if : 切换条件时会【触发销毁/挂载组件】,所以总的来说在切换时开销更高,更适合不经常切换的场景。
组件复用时所有组件实例都会共享 data,将 data 写成函数,每次用到就调用一次函数获得新的数据
把切换出去的【组件保留在内存中】,可以【保留它的状态或避免重新渲染】。为此可以添加一个keep-alive指令
<component :is='curremtView' keep-alive></component>
在下次 【DOM 更新循环结束之后】执行【延迟回调】。
props 可以是数组或对象,用于接收来自父组件的数据。
共三类方法:
作用于数据的方法(3个): vm.$watch vm.$set vm.$delete
作用于属性的方法(3个):vm.$on vm.$once vm.$off vm.$emit
作用于生命周期的方法(3个):vm.$mount vm.$forceUpdate vm.$nextTick vm.$destroy