在我进军AngularJS时,我有点困惑。造成这种情况的主要原因是因为我从未真正理解,整个事物的模型部分是什么。我的意思是,它是一个MVC框架,所以它必须有模型,对吗?所以,我对此事做了一些阅读。我试着阅读this bit of documentation, here。
我从中理解的是,控制器的模型方面,实际上是$scope
字典中的内容。很好,这并没有打扰我,直到我读了一个话语制作者blog post by evil-trout。
他试图得到的是,Angular没有适当的建模方案。我试着寻找答案,然后我碰到了this。这是一个很好的阅读,但实际上没有给我如何在AngularJS中构建模型的具体例子。
我觉得这确实缺乏,因为我已经习惯了django开发,并且拥有清晰的模型很有帮助。在emberjs中,似乎有一种方法可以制作继承自Ember类的模型。此外,在阅读了evil-trout的博客文章之后,我理解了将所有变量附加到范围的潜在缺陷,其中许多变量都是原始的,而不是对象。
那么,在AngularJS中构建模型的最佳方法是什么,以便将来可以使用可维护的代码。我坚持使用angular的主要原因是因为它写得非常简单,但是我担心它最终可能会像php一样,为了简单起见,功能常常被取代。
我希望我能够清楚地表达我的问题,如果没有,请随时发表评论,告诉我如何改进。
答案 0 :(得分:7)
它们代表了一大块数据......
他们可以是多个或一个......
这里的一个很好的例子是考虑一个消耗两个API来构建单个模型的服务。你当然可以像这样构建它:
angular.module('things', [])
.factory('Things', function($http) {
var _things = {};
_things.getThing1 = function(){return $http.get('http://ONE.com/1')};
_things.getThing2 = function(){return $http.get('http://TWO.com/2')};
return _things;
};
但是如果你想在另一个项目中使用这些API调用呢?构成我的单一服务的组件是否真的最能代表他们自己的服务?
angular.module('thing1', [])
.factory('T1', function($http) {
var _thing1 = {};
_thing1.getThing1 = function(){return $http.get('http://ONE.com/1')};
return _thing1;
};
angular.module('thing2', [])
.factory('T2', function($http) {
var _thing2 = {};
_thing2.getThing2 = function(){return $http.get('http://TWO.com/2')};
return _thing2;
};
angular.module('things', ['thing1','thing2'])
.factory('Things', function(T1,T2) {
var _things = {};
_things.getThing1 = T1.getThing1();
_things.getThing2 = T2.getThing2();
return _things;
};
现在,您可以独立于thing1
使用thing2
或things
。这是个好消息,因为您正在处理的下一个项目不需要thing1
,但肯定需要thing2
。如果不出意外,模块化服务(或任何一般代码)将为您的应用提供结构,帮助您将事物识别为组件而不是blob。
答案 1 :(得分:1)
我们已经使用Angular一段时间了,我们已经提出了一个公约,帮助我们控制范围污染。
我们在每个控制器中的$scope
变量上定义最多2个属性。 viewModel
和model
。 viewModel
是一个帮助我们实现简单模型绑定的对象,以及model
对象,它是与CRUD操作视图相关的数据。
我们在主视图(ng-view
),子视图(使用ng-include
创建的视图),指令(如果我们创建隔离范围)中遵循此约定。
无耻插件:我写了一篇blog post详细介绍了这几天:)