vue的哪些特性

234 阅读3分钟

Vue 的优缺点

优点

1、创建单页面应用的轻量级Web应用框架

2、简单易用

3、双向数据绑定

4、组件化的思想

5、虚拟DOM

6、数据驱动视图

7、前后端分离

缺点

1、Vue在开发多页应时不够灵活,需要配置多入口

2、不支持IE8

SPA的理解

SPA是 Single-Page-Application 的缩写,翻译过来就是单页应用。在WEB页面初始化时一同加载Html、Javascript、Css。一旦页面加载完成,SPA不会因为用户操作而进行页面重新加载或跳转,取而代之的是利用路由机制实现Html内容的变换。

优点

1、良好的用户体验,内容更改无需重载页面

2、SPA相对服务端压力更小

3、前后端职责分离,架构清晰

缺点

1、由于前端渲染,搜索引擎不会解析JS,只能抓取首页未渲染的模板,不利于SEO

2、单页面应用,在加载页面的时候将JavaScript、CSS统一加载,所以首次加载耗时更多

3、单页面应用需在一个页面显示所有的内容,默认不支持浏览器的前进后退(前端路由机制解决了该窘境,Hash模式中Hash变化会被浏览器记录,History模式利用 H5 新增的pushState和replaceState方法可改变浏览器历史记录栈)

MVVM的理解

MVVM是Model-View-ViewModel的缩写。
Model 代表数据层,可定义修改数据、编写业务逻辑。
View 代表视图层,负责将数据渲染成页面。
ViewModel 负责监听数据层数据变化,控制视图层行为交互,简单讲,就是同步数据层和视图层的对象。
ViewModel 通过双向绑定把 View 和 Model 层连接起来,且同步工作无需人为干涉,使开发人员只关注业务逻辑,无需频繁操作DOM,不需关注数据状态的同步问题。

MVVM的英文全称是:Model、View、View-Model,是一种基于前端的架构模式

src=http___www.uml.org.cn_AJAX_images_202006011.png&refer=http___www.uml.org.jpg

Vue与MVVM

Vue的开发者,也参考了MVVM思想,并进行了一些改进,设计了独特的Vue独有的模型。

src=http___www.pianshen.com_images_87_c54a8a65791375c301b9577bf267dabf.png&refer=http___www.pianshen.jpg

M:Model模型,对应的是data属性中的数据,需要写成一般的js对象,即上图中的plain JavaScript Objects

V:View视图,即Vue的模板Template,经过解析之后,形成的DOM页面

VM:ViewModel,即上图的绿色立方体所表示的Vue实例对象

上图中View和Model进行通信,有两条线:

一是Data Bindings:数据绑定,Model中的数据发生变化,Vue就将变化映射到页面上,另一个是DOM Listensers:DOM监听,一旦用户对页面进行操作,比如点击按钮,填写数据,Vue就将这种变化,映射到Model

代码演示

捕获.PNG M:Model,即模型,在model层,定义数据和业务逻辑

V:View,即视图,ui界面,将数据和动态交互效果展示出来

VM:View-Model,视图模型,实现Model和View的通信:监听Model的数据改变,处理用户交互操作,并且重新渲染视图,更新页面

单向数据流的理解

我们经常说 Vue 的双向绑定,其实是在单向绑定的基础上给元素添加 input/change 事件,来动态修改视图。Vue 组件间传递数据仍然是单项的,即父组件传递到子组件。子组件内部可以定义依赖 props 中的值,但无权修改父组件传递的数据,这样做防止子组件意外变更父组件的状态,导致应用数据流向难以理解。

如果在子组件内部直接更改prop,会遇到警告处理。 以下为2种定义依赖props中的值

1、通过 data 定义属性并将 prop 作为初始值

<script>
export default {
  props: ['userName'],
  data() {
    return {
      name: this.userName
    }
  }
}
</script>

2.用 computed 计算属性去定义依赖 prop 的值

<script>
export default {
  props: ['userName'],
  computed: {
    helloName() {
      return "hello" + this.userName
    }
  }
}
</sciprt>