Javascript 用独立的AngularJS控制器修复竞争条件

Javascript 用独立的AngularJS控制器修复竞争条件,javascript,angularjs,race-condition,Javascript,Angularjs,Race Condition,在我的Angular应用程序中,我有一个根据路线变化的主视图,然后是一个无论发生什么都会显示的侧边栏。我的HTML如下所示: <div id="container"> <div id="sidebar" ng-controller="SidebarCtrl">(sidebar code)</div> <div ng-view id="content">Loading...</div> </div> 所以不管

在我的Angular应用程序中,我有一个根据路线变化的主视图,然后是一个无论发生什么都会显示的侧边栏。我的HTML如下所示:

<div id="container">
    <div id="sidebar" ng-controller="SidebarCtrl">(sidebar code)</div>
    <div ng-view id="content">Loading...</div>
</div>
所以不管怎样我都不知所措

我相信有更好的方法来建立这个…有什么想法吗?我可以将
SidebarCtrl
定义为一个简单的函数,但仍然可以访问
auth
服务吗

谢谢

当您的应用程序加载时,您可以将
ng controller
属性动态添加到
侧栏

var$self=angular.element('.sidebar');
$self.attr('ng-controller',window.USER_登录?'sidebarCtrl':'noUserCtrl');
angular.bootstrap(angular.element('body'));
当要使用的控制器取决于应用程序状态时,此方法非常有用。在您的情况下,
angular.bootstrap
应该可以做到这一点


您是否使用
angular.bootstrap
ng-app
来初始化您的应用程序?我正在使用ng-app-我看到了angular.bootstrap的引用,但不确定它的作用。如果我拿出ng应用程序,我可以使用angular.bootstrap()启动标签上的应用程序吗?是的,在你的应用程序加载后,你可以调用
angular.bootstrap(angular.element('body'),['myApp'])
。棒极了,工作得很好。请随意写一个答案,我会接受的。运行angular.bootstrap而不定义模块做什么?inlineEditorCtrl是否仍然可以访问MyApp模块中定义的服务?您应该使用angular.element而不是jQuery。这里重要的一点是,angular与属性的设置在相同的上下文中加载。因此,只有在引导您的整个应用程序之后,它才会查看
inlineEditorCtrl
,然后,模块将被定义。因此,当您加载时,控制器将完全正常工作。在您的情况下,您甚至不需要动态设置控制器,并且仅在加载控制器后才能看到它。
MyApp.controller('SidebarCtrl', 
['$scope', '$location', 'auth', function($scope, $location, auth) {
    (...)
}])