嵌套控制器,示波器和模型的最佳实践?

时间:2014-04-04 09:05:09

标签: angularjs angularjs-scope

我已经看过(并阅读过)有关嵌套作用域如何工作的大量信息,而且我似乎已经很好地理解它并且使用/滥用它很多。我的问题不是关于它是如何工作的,而是一个如何最好地使用它的问题。让我举个例子。

<body ng-controller="MainCtrl">
  <div class="container" ng-view>

视图将加载如下内容:

<div ng-controller="CreateEventCtrl">
...
    <div class="panel-body" ng-include src="'partials/eventinfo.html'">

那个部分也会有一个控制器。这对我来说都很有意义。我得到了一个MainCtrl,知道你的登录信息,你的喜好等.CreveEventCtrl将知道处理事件的创建,编辑等需要什么以及特定的部分(手风琴的一部分需要显示一些特定的信息。) p>

我可能需要从其中一个父控制器访问内容,这很容易,但我的问题是;它可以用许多不同的方式完成,我似乎无法弄清楚最好的方法是什么。

到目前为止,我已经尝试了以下实现。

  1. 让MainCtrl创建一个$scope.model来保存基本信息,让所有其他子控制器只将它们自己的属性扩展到该模型上。
  2. 让MainCtrl创建一个$scope.model,让子控制器附加一个额外的模型,如$scope.model.createEventModel = { ... },或者直接在范围上添加模型,如$scope.createEventModel = { ... }
  3. 让MainCtrl创建一个$scope.shared模型,让第一级子控件创建一个$scope.model,其下一个孩子可以在其上扩展,覆盖或添加新的$scope.eventInfoModel,具体取决于具体内容对于当前的观点来说是最好的。所有子控制器都可以选择扩展/覆盖$scope.shared上的属性
  4. 似乎有很多变化而且我只是想知道是否有最佳实践。我已经尝试过google了,但最终还是发布了大量帖子,试图解释点&#39;原型继承以及嵌套作用域的工作原理。

    目前我和nr.3一起去,但我也知道我可能会在某个时候挑战自己的决定,然后重新做一遍。我真的想要快速完成所有额外的工作,并了解其他人在做什么。

    更新:我到处读到我应该使用服务来共享数据。但我不明白。我想要共享的数据可以通过服务获取,但它是单向的&#34; get / fetch&#34;操作。此外,一些数据是反映/过滤其余数据的用户选择

1 个答案:

答案 0 :(得分:0)

我听了你们的意见并试了一下。我最终创建了一些保存我的共享数据的服务,然后让所有控制器都需要这些信息,并将其注入。

虽然我真的不喜欢这种方法,但我发现它清楚地说明了哪些控制器将使用数据以及哪些控制器不会。它还有助于分离关注点,因为我可以将所有存储/加载/修改/缓存放入服务中,而不用担心它在控制器中。我需要在控制器中做的就是获取数据或将其放回去。