我已经看到(并阅读)了很多有关嵌套作用域如何工作的信息,而且我似乎很好地理解了它,并经常使用/滥用它。我的问题不是关于它是如何工作的,而只是关于如何最好地使用它的问题。让我举个例子吧。
<body ng-controller="MainCtrl">
<div class="container" ng-view>
该视图将加载如下内容:
<div ng-controller="CreateEventCtrl">
...
<div class="panel-body" ng-include src="'partials/eventinfo.html'">
那部分也将有一个控制器。这对我来说意义非凡。我得到了一个MainCtrl,它了解您的登录信息,首选项等。CreateEventCtrl将知道处理和创建事件等特定部分(手风琴的一部分将需要显示一些特定信息)。
我可能需要从一个父控制器访问东西,这很容易,但是我的问题是;它可以通过许多不同的方式来完成,而我似乎无法弄清楚什么是最好的方式。
到目前为止,我已经尝试了以下实现。
$scope.model
让MainCtrl创建一个保存基本信息的控件,然后让所有其他子控制器将它们自己的属性扩展到该模型上。$scope.model
让MainCtrl创建一个,并让子控制器添加这样的额外模型,$scope.model.createEventModel = { ... }
或者像这样直接在范围内添加模型$scope.createEventModel = { ... }
$scope.shared
让MainCtrl创建一个模型,并让第一级子控制器创建一个模型$scope.model
,使其下一个子控件可以扩展,覆盖或添加新的子控件$scope.eventInfoModel
,具体取决于当前视图的最佳选择。所有子控制器可以选择延长/覆盖性能$scope.shared
,以及似乎有很多变化,我只是想知道是否有最佳实践。我已经尝试过用google搜索它,但最终却发布了大量文章,试图解释“点”,原型继承以及嵌套作用域如何工作。
目前,我要使用nr.3,但我也知道我可能会在某个时候挑战自己的决定,然后再次进行修改。我真的很想简化所有这些额外的工作,并了解其他人在做什么。
更新:我到处都读到我应该使用服务共享数据。但是我不明白。我想共享的数据可能是通过服务获取的,但这是一种单向的“获取/获取”操作。另外,某些数据是用户选择,可以反映/过滤其余数据
我听了你们的尝试。我最终创建了一些服务来保存我的共享数据,然后让所有需要该信息的控制器进行注入。
虽然我真的不喜欢这种方法,但是我发现它可以清楚地表明哪些控制器将使用数据,哪些控制器将不使用数据。这也有助于消除关注点,因为我可以将所有存储/加载/修改/缓存都放入服务中,而不必担心控制器中会出现这种情况。我在控制器中需要做的就是获取数据或将其放回去。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句