Javascript AngularJS的单对象模型
我正在AngularJS中试验一些最佳实践,特别是在设计模型方面。在我看来,AngularJS的一个真正力量是 '当模型更改时视图得到更新,反之亦然' 。这导致了一个显而易见的事实 “在任何给定的时间,该模型都是唯一的真理来源 应用程序状态' 现在,在阅读了关于设计正确的模型结构的各种博客文章之后,我决定使用类似“单对象”的方法。这意味着整个应用程序状态在单个JavaScript对象中维护 例如,一个待办事项应用程序Javascript AngularJS的单对象模型,javascript,angularjs,model-view-controller,model,angularjs-scope,Javascript,Angularjs,Model View Controller,Model,Angularjs Scope,我正在AngularJS中试验一些最佳实践,特别是在设计模型方面。在我看来,AngularJS的一个真正力量是 '当模型更改时视图得到更新,反之亦然' 。这导致了一个显而易见的事实 “在任何给定的时间,该模型都是唯一的真理来源 应用程序状态' 现在,在阅读了关于设计正确的模型结构的各种博客文章之后,我决定使用类似“单对象”的方法。这意味着整个应用程序状态在单个JavaScript对象中维护 例如,一个待办事项应用程序 $scope.appState = { name: "toDoApp", au
$scope.appState = {
name: "toDoApp",
auth: {
userName: "John Doe",
email: "john@doe.com",
token: "DFRED%$%ErDEFedfereRWE2324deE$%^$%#423",
},
toDoLists: [
{ name: "Personal List",
items: [
{ id: 1, task: "Do something ", dueDate: "2013-01-10 11:56:05", status:"Open", priority : 0},
{ id: 2, task: "Do something ", dueDate: "2013-01-10 11:56:05", status:"Open", priority : 1},
{ id: 3, task: "Do something ", dueDate: "2013-01-10 11:56:05", status:"Open", priority : 0}]
},
{ name: "Work List",
items: [
{ id: 1, task: "Do something ", dueDate: "2013-01-10 11:56:05", status:"Open", priority : -1},
{ id: 2, task: "Do something ", dueDate: "2013-01-10 11:56:05", status:"Open", priority : 0},
{ id: 3, task: "Do something ", dueDate: "2013-01-10 11:56:05", status:"Open", priority : 0}]
},
{ name: "Family List",
items: [
{ id: 1, task: "Do something ", dueDate: "2013-01-10 11:56:05", status:"Open", priority : 2},
{ id: 2, task: "Do something ", dueDate: "2013-01-10 11:56:05", status:"Open", priority : 0},
{ id: 3, task: "Do something ", dueDate: "2013-01-10 11:56:05", status:"Open", priority : 5}]
}
]
})
根据应用程序的复杂性,这个对象将变得巨大。关于这一点,我有以下担忧,并将其标记为问题
- 这种做法是否可取?当应用程序开始扩展时,我将面临哪些缺点和陷阱 当对象的一小部分被更新时,优先级增加,角度会巧妙地重新渲染delta,还是考虑到 对象已更改并重新渲染整个屏幕?(这将导致贫困。) 性能),如果是的话,工作围绕着什么
- 现在,由于整个DOM被顺利地转换为一个JavaScript对象,应用程序必须继续操作这个对象。是吗 拥有适合复杂JavaScript对象操作的工具,如 jQuery是DOM操纵器之王
- 数据已被整齐地抽象和组织,以便在任何时候 可以序列化到服务器、firebase或本地导出到用户
- 实现崩溃恢复将很容易,将此功能视为台式机中的“休眠”选项
- 模型和视图完全解耦。例如,A公司可以编写模型来维护状态,而很少有明显的控制器来更改状态 模型和一些与用户交互的基本视图。现在这家公司 可以邀请其他开发人员公开编写自己的视图和 请求A公司提供更多控制器和REST方法。这 将授权精益开发
- 如果我开始将这个对象的版本控制到服务器上,我可以用用户看到网站的方式对用户进行回放,并且可以继续工作而不费吹灰之力,该怎么办。这将作为单页应用程序的真正后退按钮
<div class="user" ng-controller="UserWidgetCtrl">
<span>{{appState.auth.userName}}</span>
</div>
<div class="user" ng-controller="UserWidgetCtrl">
<span>{{user.userName}}</span>
</div>
function UserWidgetCtrl($scope) {
$scope.user = $scope.appState.auth;
}
function UserWidgetCtrl($scope, UserService) {
UserService.getUser().then(function(user) {
$scope.user = user;
})
}