AngularJS应用程序中有多个控制器的原因是什么?我现在已经构建了一些角度应用程序,我从来没有遇到过一个问题,我认为多个控制器会让事情变得更容易。
我仍然是一个n00b,从来没有写过单元测试,而且我的代码不像它那样可管理,所以我确定这只是无知。而且我听说其他人有多个控制器。
换句话说:如何知道他们应该创建一个新的控制器?
答案 0 :(得分:12)
从我所看到的,Angular应用程序应该有单独的控制器用于不同的范围。例如,几乎所有应用程序都有用户数据。您希望将这些数据附加到用户控制器内的用户模型:
function UserCtrl ($scope) {
$scope.user = {
name: "bmorrow",
lastLogin: "4/16/2013"
};
}
模板(我们的视图)将位于应用程序结构的特定部分内。例如,导航栏的右侧,或用户详细信息页面上的右侧。我们通过使用ng-controller
为控制器分配控制器来确定该部分的位置。这将创建所述控制器的scope
并将相应的模型绑定到它。模型(我们的数据)通过控制器连接到视图(HTML)。
假设应用程序有一个用户书面文章的页面。我们可以创建另一个仅限于专门保存文章内容的HTML部分的控制器。
function ArticleCtrl ($scope) {
$scope.article = {
title: "Hello World",
body: "Lorem ipsum...."
};
}
在上面的简单示例中,组合两个控制器不会造成任何伤害。但是,一旦您的应用程序开始增长,根据它所代表的数据逻辑地组织您的控制器/视图将使您的代码更清晰,更容易理解。更少的不必要的复杂性将使您更容易一切。使用一个控制器来处理所有事情是一种不必要的复杂性。
您也可以在Basarat的答案中看到这一点。您不一定需要为每个路由使用一个控制器,但这样做有助于逻辑地构建应用程序。
因此,要回答您的问题,您通常应该为每个类别的数据配备一个控制器。用户,文章,水果,蔬菜,交易等。
如果您还没有,请阅读Angular Controllers和Model-View-Controller模式以获取更多信息。我希望这会有所帮助。
答案 1 :(得分:7)
当您开始将应用程序拆分为多个视图时,您肯定需要更多控制器。
e.g。当您开始使用路线(也称为深度链接)时,您有一个模板网址以及一个控制器来使用该模板(请查看http://docs.angularjs.org/tutorial/step_07),例如
angular.module('phonecat', []).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/phones', {templateUrl: 'partials/phone-list.html', controller: PhoneListCtrl}).
when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: PhoneDetailCtrl}).
otherwise({redirectTo: '/phones'});
}]);
答案 2 :(得分:1)
我喜欢将控制器视为"小部件。"我的后端的一页,他们可以打开ViewUsers
控制器(小部件),这可以打开更多的UserDetail
控制器。
我想如果您已经习惯了OOP,那么想要将其范围分开并封装起来感觉很自然。