Jeeeeeeeeen

单页应用进行时 - Vue.js篇

December 25, 2015 | 0 Minute Read

overview

移动端的开发,选择较轻量级的MVVM框架 Vue.js,再结合 webpack 工具可以快速的实现SPA的开发。通过Vue很容易实现数据的双向绑定,而基于数据驱动的组件开发,又可以模块化组合和测试。

相对于AngularJS这样的双向数据绑定的框架,Vue更像是一个轻盈的插件或库,也可以说抽离出一个大型框架的核心模块,关注你所关心的视图层,让你有更多选择其他的Vue组件或插件的权利来管理你的项目。

目前尝试开发以“商城用户中心”为核心模块的webapp SPA页面也基本成型。见 DEMO

或许还只是某种概念上一个样本(还缺少请求后台数据API),涉及到具体业务还得需要具体问题,具体分析和具体实现,但基于Vue的数据驱动,从操作DOM里解救出来,组件化的开发,让事情实现变得轻松起来,可以说能应对经验之内的实际情况的需求。

视图层

Vue 开篇就说“数据驱动的组件,为现代化的 Web 界面而生”,由此也见它只聚焦于视图层。Vue 以真实的DOM为视图模板,原生对象为数据模型,实现DOM和数据的双向绑定。

组件

除了可以自定义指令过滤器外,Vue的组件可以自定义元素,可以通过props把数据传递给子组件,

父子组件通信可以通过父链,但需要明确他们的层级关系。另外,自定义事件(独立于DOM原生事件)可以用于组件树间的通信,包括监听事件、触发事件、派发事件和广播事件。

通过slot内容分发(Angular 术语称为 transclusion)组合组件

过渡和动画

组件的切换或路由的切换,换言之,即DOM的插入和移除时,在适当的时机触发CSS过渡或动画。Vue提供了javascript钩子函数,比如 beforeEnterenterafterEnterenterCancelledbeforeLeaveleaveafterLeaveleaveCancelled

store模式

通过路由的变化,以及不同组件的数据和状态,意味着状态和数据是实时动态变化的,为了更好地管理状态,将这些共享的组件集中管理。而同时应该明确: 组件间不应紧密耦合;不应任意直接修改父组件状态。

架构思路

针对于移动端而言,总体结构是以Vue为基础框架,实现对视图层进行管理,并通过官方插件vue-router做为路由管理,以及vue-resource(或以实现原生的AJAX为模块)实现与服务器数据交互,并将共享数据集中管理。

结合Vue对构建大型项目的实践建议,更加轻易构建和管理项目了。其他具体可能涉及到开发过程中更加详细地思考和实践,从而更深层次地探索出一条全新的前后分离模式。