使用独立的 AngularJS 控制器修复竞争条件
Fix race condition with independent AngularJS controller
在我的 Angular 应用程序中,我有一个根据路线变化的主视图,然后是一个无论如何都会显示的侧边栏。我的 HTML 看起来像这样:
<div id="container">
<div id="sidebar" ng-controller="SidebarCtrl">(sidebar code)</div>
<div ng-view id="content">Loading...</div>
</div>
javascript按以下顺序加载:
- 供应商.js(棱角等)
- 应用程序.js(我的应用程序)
侧边栏 Ctrl 在 App.js 中定义。然而,当 Angular 加载时,它会看到 ng-controller
指令并尝试立即将其分配给侧边栏,导致"参数 SidebarCtrl 不是函数"错误,除非缓存了 app.js。我正在考虑将侧边栏放在一个单独的文件中并在 Vendor.js 之前加载它,但侧边栏依赖于 App 中定义的一些服务.js(即我的自定义身份验证服务):
MyApp.controller('SidebarCtrl',
['$scope', '$location', 'auth', function($scope, $location, auth) {
(...)
}])
所以无论哪种方式,我都不知所措。
我相信有更好的方法来设置它...有什么想法吗?我是否可以将SidebarCtrl
定义为简单函数,但仍可以访问auth
服务?
谢谢
您可以在
应用加载时动态地将 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
应该可以解决问题。
源
相关文章:
- 如何解决取消抖动的用户输入上的竞争条件
- JavaScript 中的竞争条件
- Chrome扩展 chrome.storage 如何同时进行大量获取和设置并避免竞争条件
- 修复在执行http获取请求angularJS时的竞争条件
- JavaScript img.oner更改源-竞争条件时出错
- 使用jQuery提交表单时的竞争条件
- Firefox启动的扩展,在顶级中导入时的竞争条件
- Javascript-在检查对象属性是否存在时避免异步竞争条件
- 使用独立的 AngularJS 控制器修复竞争条件
- jQuery 事件的竞争条件
- 可能的 JavaScript ajax 调用竞争条件
- JS AJAX 提前键入结果排序/竞争条件
- JavaScript 承诺和竞争条件
- 具有多个“数据”事件处理程序和竞争条件的 NodeJS 流
- 在Javascript中竞争条件可能吗?(例如:我想原子地获取和设置值)
- 如何使用getter和setter方法创建一个Angular工厂而不遇到竞争条件
- 如何使用javascript使异步ajax半同步以避免竞争条件
- Koa.js在竞争条件下产生值
- 用于循环ajax潜在竞争条件的Javascript
- 可能的PHP/Javascript竞争条件