0

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

<div id="container">
    <div id="sidebar" ng-controller="SidebarCtrl">(sidebar code)</div>
    <div ng-view id="content">Loading...</div>
</div>

并按以下顺序加载 javascript:

  1. Vendor.js(角度等)
  2. App.js(我的应用程序)

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服务吗?

谢谢

4

1 回答 1

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应该做的伎俩。

来源

于 2013-11-10T19:29:50.177 回答