Angularjs 嵌套控制器、作用域和模型的最佳实践?

Angularjs 嵌套控制器、作用域和模型的最佳实践?,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我已经看到(并阅读)了很多关于嵌套作用域如何工作的信息,我似乎已经很好地理解了它,并且经常使用/滥用它。我的问题不是它如何工作,而是如何最好地利用它。让我举个例子 <body ng-controller="MainCtrl"> <div class="container" ng-view> 视图将加载如下内容: <div ng-controller="CreateEventCtrl"> ... <div class="panel-bod

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

<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将知道需要什么来处理事件的创建、编辑等,并且手风琴的特定部分(部分)将需要显示一些特定信息

我可能需要从一个父控制器访问内容,这很容易,但我的问题是,可以用很多不同的方法来完成,我似乎不知道最好的方法是什么

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

  • 让MainCtrl创建一个包含基本信息的
    $scope.model
    ,并让所有其他子控制器将其自身属性扩展到该模型上
  • 让MainCtrl创建一个
    $scope.model
    ,并让子控制器像这样附加一个额外的模型
    $scope.model.createEventModel={…}
    ,或者像这样直接在作用域上添加模型
    $scope.createEventModel={…}
  • 让MainCtrl创建一个
    $scope.shared
    模型,并让第一级子控制器创建一个
    $scope.model
    ,其下一个子控制器可以扩展、覆盖或在其上添加新的
    $scope.eventInfoModel
    ,具体取决于最适合当前视图的内容。所有子控制器都可以选择扩展/覆盖属性也在
    $scope.shared上
  • 似乎有很多变体,我只是想知道这方面是否有最佳实践。我尝试过谷歌It,但最终有大量文章试图解释“点”、原型继承以及嵌套作用域的工作原理

    目前我选择nr.3,但我也知道我可能会在某个时候挑战我自己的决定,并再次修改。我真的很想缩短所有额外的工作,并了解其他人在做什么


    更新:我到处都读到我应该使用服务来共享数据。但我不明白。我想共享的数据可能是通过服务获取的,但它是单向的“获取/获取”操作。还有一些数据是反映/过滤其余数据的用户选择

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


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

    我不知道“我的”方法是否适合您的需要,但试着看看人力资源管理,我只想共享数据,而不必担心我有什么控制器/嵌套。我认为这对我的情况不太适用,但谢谢。如果您正在寻找最佳实践,请使用此ng controller=“MainCtrl”这是完全错误的,因为全球变暖issue@Whisher你能详细说明一下这一点,或者帮我链接解释一下原因吗?我同意@baba的观点,实现这一点的方法只有两种…使用服务进行模型持久化或使用$rootScope…但是永远不要使用$rootScope,除非绝对没有其他选择,因为这会污染e全局名称空间。