我想在 Angular 中“模拟”全局变量。我还希望能够在 App_Init() 类型的处理程序中初始化这些“全局变量”。这样的初始化将需要调用 $http 来填充这些变量。我希望在Angular“调用”控制器和视图之前完全加载所有“全局变量”,因为控制器将依赖于初始化数据。
Angular中有哪些最佳实践?嵌套控制器?服务?
示例:管理餐厅菜单中项目的应用程序。每个项目将与一个类别(饮料、开胃菜、甜点等)相关联。在Angular“甚至触及”食品的控制器和视图之前,我需要先加载所有这些类别。
我想在 Angular 中“模拟”全局变量。我还希望能够在 App_Init() 类型的处理程序中初始化这些“全局变量”。这样的初始化将需要调用 $http 来填充这些变量。我希望在Angular“调用”控制器和视图之前完全加载所有“全局变量”,因为控制器将依赖于初始化数据。
Angular中有哪些最佳实践?嵌套控制器?服务?
示例:管理餐厅菜单中项目的应用程序。每个项目将与一个类别(饮料、开胃菜、甜点等)相关联。在Angular“甚至触及”食品的控制器和视图之前,我需要先加载所有这些类别。
您是否正在为您的应用程序使用ng-view该$routeProvider服务?假设您正在或将要考虑,以下是您可以按步骤顺序执行的操作:
categories。resolve属性route确保对服务的依赖得到解决。categories因此,您可以将categories服务注入控制器并确保服务始终可用,因为它已被解析。如果您以前从未resolve在配置路由时使用过该属性,这里是一个示例和官方文档中讨论它的部分。我建议你通过它们。
此外,为了了解其resolve工作原理,您需要熟悉 promise 和 deferred 的概念。如果您不是,这里是该主题的一个很好的起点。$q是 AngularJS 的 promise/deferred 实现。
我无法评论上述方法是否是最佳实践,但我知道使用服务来提供对某些数据/函数的访问是一个很好的实践,比如是否存在全局变量。
您可以创建一个服务来从服务器加载配置并将其放在 rootScope 中,在您的控制器中,您可以在您的函数上调用此服务,并在视图中从 ng-init 调用此函数。
看法
<mytag ng-init="myFunc()">
控制器
module.controller('MyCtrl', function($scope, myService){
$scope.myFunc = function(){
myService();
}
}
您的服务(初始化应用程序)
module.service('myService', function($http, $rootScope){
//do something
$rootScope.config = configLoaded;
}
另一个提示
如果您在异步调用方面遇到问题,可以尝试使用
var deferred = $q.defer();
//when your call come back
deferred.resolve(yourData);
//and in the last line of function
deferred.promise;