在我的Angular应用程序中,我有一个根据路径更改的主视图,然后是无论如何显示的侧边栏。我的HTML看起来像这样:
<div id="container">
<div id="sidebar" ng-controller="SidebarCtrl">(sidebar code)</div>
<div ng-view id="content">Loading...</div>
</div>
javascript按此顺序加载:
SidebarCtrl在App.js中定义。然而,当Angular加载时,它会看到ng-controller
指令,并尝试将其直接分配到侧边栏,导致“参数SidebarCtrl不是函数”错误,除非app.js被缓存。我想将侧边栏放在一个单独的文件中并在Vendor.js之前加载它,但侧边栏依赖于App.js中定义的一些服务(即我的自定义身份验证服务):
MyApp.controller('SidebarCtrl',
['$scope', '$location', 'auth', function($scope, $location, auth) {
(...)
}])
所以无论哪种方式我都不知所措。
我确信有更好的方法来设置它...任何想法?我可以将SidebarCtrl
定义为一个简单的函数,但仍然可以访问auth
服务吗?
由于
答案 0 :(得分:1)
当您的应用加载时,您可以动态将ng-controller
属性添加到sidebar
:
var $self = angular.element('.sidebar');
$self.attr('ng-controller', window.USER_LOGGED_IN ? 'sidebarCtrl' : 'noUserCtrl');
angular.bootstrap(angular.element('body'));
当要使用的控制器取决于应用程序状态时,此方法很有用。在您的情况下,angular.bootstrap
应该可以解决问题。