何时使用嵌套控制器而不是在angularjs中使用服务?

我刚刚开始使用AngularJS,所以我不是专家.

我有一个div代表我的html视图的正确区域.在那个div我有一个控制器,即

<div class="rightContainer" ng-controller="rightContainerCtrl">...</div>

在那个div里面我有一个表,一个搜索区域等.那个div里的每个区域都有自己的控制器,它看起来像这样:

<div class="rightContainer" ng-controller="rightContainerCtrl">
...
   <div class="search" ng-controller="searchCtrl">...</div>
...
   <div class="table" ng-controller="tableCtrl">...</div>

 </div>

例如,搜索区域有自己的控制器,它是rightContainerCtrl的一个小孩,因为它需要改变父(rightContainerCtrl)中的一些内容,但是rightContainer div正在增长,现在它很大,并且包含几个嵌套的控制器.

我认为使用这个嵌套控制器在这种情况下是不好的,因为所有的嵌套控制器共享父范围,并不是所有的控制器都需要访问所有的父范围变量,所有的控制器都是rightContainerCtrl的“囚犯”,所以他们是与他们的母公司高度配合.

它看起来像一个God object反模式(在这种情况下是上帝控制器),所以我认为,而不是使用嵌套的控制器,我可以重构我的代码,以消除rightContainerCtrl控制器,并使用一个服务(像facade design pattern),那个服务将由控制器使用,而不是共享作用域变量.

但由于我不是AngularJs专家,我不知道我是对的,或者如果最好离开这位父母的控制人,也许我错过了一些事情,所以我的问题是

什么时候更好地使用嵌套的控制器(嵌套范围),而最好是在angularjs中使用服务?

控制器/范围层次结构不应该规定数据/模型在应用程序中的共享方式.当您想到Angular中的数据共享时,请考虑依赖注入.

在@ shaunhusain的回答中引用的视频中,Misko声明范围应该引用模型,而不是模型 – 所以不要将数据建模/放置到范围内.您的型号/数据通常应在服务中.

在写一个Angular应用程序时,首先考虑一下你的模型.将它们放在services with APIs中以获取/编辑/操纵模型.然后设计你的意见.每个视图都应该投射/使用/操纵你的模型的一些子集.为每个视图定义一个控制器,只需将所需的模型子集粘贴到视图中即可.使您的控制器尽可能薄.

(也不推荐命名一个控制器rightContainerCtrl.控制器不应该知道演示/布局.)

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...