Javascript 将主控制器设置为角度控制器好吗?

Javascript 将主控制器设置为角度控制器好吗?,javascript,angularjs,Javascript,Angularjs,我不知道这是否是一个好的做法。。。我在route config中定义了一个控制器,但因为我的HomeCtrl处于ng if语句中,他无法侦听LoginsAccess,所以我制作了MainCtrl,它侦听LoginsAccess,并做出适当的反应。这段代码运行得很好,但我觉得这有点像黑客。我应该删除MainCtrl并将其作为服务吗?如果是这样的话,举个例子就太好了 Index.html <body ng-app="myApp" ng-controller="MainCtrl">

我不知道这是否是一个好的做法。。。我在route config中定义了一个控制器,但因为我的
HomeCtrl
处于
ng if
语句中,他无法侦听
LoginsAccess
,所以我制作了
MainCtrl
,它侦听
LoginsAccess
,并做出适当的反应。这段代码运行得很好,但我觉得这有点像黑客。我应该删除
MainCtrl
并将其作为服务吗?如果是这样的话,举个例子就太好了

Index.html

<body ng-app="myApp" ng-controller="MainCtrl">
    <div ng-if="!isLoged()">
      <signIn></signIn>
    </div>
    <div ng-if="isLoged()">
      <div class="header">
          <div class="nav">
            <ul>
                <a href="/"><li class="book">navItem</li></a>
            </ul>
          </div>
      </div>
      <div class="container" ng-view=""></div>
    </div>
</body>

在我看来,angular js的强大之处在于将不同的控制器指令、服务、资源等清晰地分开。理想情况下,控制器链接到模板或部分,用于更新前端并调用服务或资源。你越早开始进行这些分离,你就越早开始开发其他开发者可以快速理解的干净且可扩展的应用程序。对于应用程序结构,我强烈建议您研究以下两种工具之一:

如果你向下滚动,lineman网站实际上有一个很好的总结,说明了两者的区别

在您的场景中,有许多方法可以链接不同作用域中的控制器或进行函数调用。您可以创建一个注入控制器的服务,也可以使用$emit和$on在应用程序中设置通知,例如:

在控制器A中

$rootScope.$on('myNotifier:call', function() {
        myFunction();
    });
在控制器B或任何其他控制器中,您可以使用以下命令调用myFunction():


我的所有角度项目都以以下方式开始:

使用“全局”控制器可能不是必要的,但在需要时,有它在身边总是很好的。例如,我在我的CMS中使用它来设置一个绑定,该绑定启动其他所有内容的加载-因此所有子控制器都会因为它而加载。这并不违反关注点的分离,因为全局控制器的关注点是促进其他控制器的加载


也就是说,只需确保尽可能地保持模块化/分离和可重用。如果您的控制器依赖全局控制器的存在来运行,然后是一个问题。

tnx供您反馈。我使用yeoman搭建脚手架。但我面临的问题是,
ng if
指令超出了
HomeCtrl
的范围,因为我无法在
HomeCtrl
内监听用户登录,所以我制作了一个
MainCtrl
,它是一个全局控制器,并添加到
body
如何设置主控制器和其他控制器?@chovy有点复杂。我重新开始了那个项目,还没有时间去做。。。。这个想法与使用ui路由器时的主
ui视图
元素类似。我的顶级控制器使用一个服务来获取描述当前页面的json,然后它将一些细节绑定到视图,如
div template=“page.template”>
。如果没有看到它,这可能没有任何意义:)
$rootScope.$on('myNotifier:call', function() {
        myFunction();
    });
$scope.$emit('newPatientModal:close');