MVVM相关

2015年03月11日

为什么要用MVVM

按我的性格是这样的,别人告诉我一样东西好,我需要知道理由是什么,如果自己感受不到,那么心里头会不信或者说不服,用着也不爽学的也不踏实,所以还是实际场景中自己碰壁了才会是最好的学习驱动力。

Don‘t repeat yourself

做前端开发以来,涉及js的部分绝大多数是dom操作和UI交互。写流量购后台的时候,大量的数据填充搞的自己很烦,代码量很大但是实际就是一些重复的工作,代码重复混乱,不易扩充, 业务逻辑和页面处理混在一起。后来优化的时候把大量使用字符串拼接的内容用underscore的template处理掉了,感觉一身清爽。

正式工作大半年的时间,忙,但是感觉不到自己的进步,大量的工作还是和dom操作打交道,代码乱逻辑乱。

接下来的钱包运营管理系统希望可以做的精致一点,比流量购进步一点,基本工作会的基础上,应该去追求优雅高效的组织代码和提高开发效率。

知乎上的一些讨论信息

围观了一些知乎上关于为什么要用MVVM框架的一些答案。
感觉有理的: mvc编程思路: 面向数据编程,把所有精力放在数据处理,尽可能减少对网页元素的处理。

网络大型应用程序主要是以下流程:
1) 你要获取界面上的数据
2)后台交换数据
3)获取数据后,对界面重新进行渲染

面对的问题(深有感触啊!!!):

  1. 重复代码
  2. 混乱代码
  3. 更多精力用在UI的交换细节和渲染细节处理
  4. 不宜扩充
  5. 用户交互触发事件
  6. 数据处理不在框架之内
  7. 面向网页元素编程

1.数据绑定
比方讲你要做一个天猫那样的购物车。页面里的“加入购物车按钮”,底部购物车里的“增”“减”按钮,底部购物车里的输入框,都可以修改商品的数量。修改的时候,顶栏的购物车也要跟着变。 如果你是用点击事件+callback的方法写,思路绕,代码丑。 如果你是用mv*的方法,所有的用户操作都可以变成对购物车里数据的修改。mv*框架的数据绑定帮你为数据加上事件。不管是思路,还是写出来的代码,都清爽太多。

2.SPA 要做单页面网页,必须得有
1.前端template
2.路由功能

链接

MVVM框架有哪些

angularJS vueJS

angularJS

官网示例实践

1、写hello world的时候,本能的把<script>标签写到了body下面,但是这么做发现\会先闪出来再填充数据。把引入angular的<script>标签写到<head>里面就没有这个问题了O(∩_∩)O~

 的问题
在页面初始化的时候,用户可能会看到 ,然后闪烁一下才出现真正的内容。
解决办法:

使用 ng-cloak directive 来隐藏它
使用 ng-bind 替代 

2、angular官网上有一个练习的项目

git clone https://github.com/angular/angular-phonecat.git 但是估计是天朝GFW的问题,简直死都clone不下来啊!!!最后只能

git clone --depth=14 https://github.com/angular/angular-phonecat.git 只下载最近的提交

3、一直是用npm做为包管理器的,这里需要用一下bower

sudo npm install
//Bower - 客户端的包管理器
//Http-Server - 本地web服务器
//Karma - 跑单元测试的
//Protractor - 端对端测试

bower install

npm start //开启本地服务器 就直接可以用http://localhost:8000/app/index.html访问了

npm test //跑测试用例

4、在index.html模板中添加一个绑定来实时显示query模型的当前值,如果你想让<title>元素绑定上query模型,你必须把ngController声明移动到HTML元素上,因为它是title和body元素的共同祖先。一定要注意把body元素上的ng-controller声明给删了。一个页面不要出现重复的ng-controller声明

当绑定两个花括号在title元素上可以实现我们的目标,但是你或许发现了,页面正加载的时候它们已经显示给用户看了。(同第一条的问题)一个更好的解决方案是使用ngBind或者ngBindTemplate指令,它们在页面加载时对用户是不可见的!

最大的体会:
angular没有笨拙的dom操作;
不要看中文文档,更新并不及时!

一些点

angularJS优缺

CRUD 类型的操作是它所擅长的,复杂的游戏什么的它不行。

参考链接

AngularJS 最佳实践