Model view controller 应用程序初始化处理程序等效于Angular?

Model view controller 应用程序初始化处理程序等效于Angular?,model-view-controller,angularjs,controller,initialization,Model View Controller,Angularjs,Controller,Initialization,我想以角度“模拟”全局变量。我还希望能够在App_Init()类型的处理程序中初始化这些“全局变量”。这样的初始化将需要$http调用来填充这些变量。我希望在Angular“调用”控制器和视图之前完全加载所有“全局变量”,因为控制器将依赖于初始化的数据 在这方面有哪些最佳实践?嵌套控制器?服务 示例:管理餐厅菜单项的应用程序。每个项目将与一个类别(饮料、开胃菜、甜点等)相关联。在Angular“甚至触摸”食品的控制器和视图之前,我需要先加载所有这些类别。您是否正在为您的应用程序使用ng view

我想以角度“模拟”全局变量。我还希望能够在App_Init()类型的处理程序中初始化这些“全局变量”。这样的初始化将需要$http调用来填充这些变量。我希望在Angular“调用”控制器和视图之前完全加载所有“全局变量”,因为控制器将依赖于初始化的数据

在这方面有哪些最佳实践?嵌套控制器?服务


示例:管理餐厅菜单项的应用程序。每个项目将与一个类别(饮料、开胃菜、甜点等)相关联。在Angular“甚至触摸”食品的控制器和视图之前,我需要先加载所有这些类别。

您是否正在为您的应用程序使用
ng view
$routeProvider
服务?假设你是或将考虑,这里是你可以按照步骤的顺序:

  • 构建一个服务,该服务提供对其所调用的类别的访问。我的想法是,该服务将在第一次调用时从服务器加载类别,然后缓存加载的数据,因此下一次调用时,将提供缓存副本,以将请求保存到服务器。现在让我们把这项服务称为分类服务
  • 使用
    route
    对象的
    resolve
    属性,确保在加载用户请求的视图(以及相应的控制器)之前解决对
    类别
    服务的依赖关系。因此,您可以将
    类别
    服务注入控制器,并确保该服务始终可用,因为它已被解析
  • 如果您以前从未在配置路由时使用过
    resolve
    属性,请参阅和。我建议你仔细检查一下

    此外,为了理解
    resolve
    的工作原理,您需要熟悉承诺和延迟的概念。如果你不是,这是一个很好的话题出发点。是AngularJS对承诺的履行/延期


    我无法评论上述方法是否是最佳实践,但我知道使用服务提供对某些数据/功能的访问是一种好的实践,例如如果存在全局变量。

    您是否为您的应用程序使用
    ng view
    $routeProvider
    服务?假设你是或将考虑,这里是你可以按照步骤的顺序:

  • 构建一个服务,该服务提供对其所调用的类别的访问。我的想法是,该服务将在第一次调用时从服务器加载类别,然后缓存加载的数据,因此下一次调用时,将提供缓存副本,以将请求保存到服务器。现在让我们把这项服务称为分类服务
  • 使用
    route
    对象的
    resolve
    属性,确保在加载用户请求的视图(以及相应的控制器)之前解决对
    类别
    服务的依赖关系。因此,您可以将
    类别
    服务注入控制器,并确保该服务始终可用,因为它已被解析
  • 如果您以前从未在配置路由时使用过
    resolve
    属性,请参阅和。我建议你仔细检查一下

    此外,为了理解
    resolve
    的工作原理,您需要熟悉承诺和延迟的概念。如果你不是,这是一个很好的话题出发点。是AngularJS对承诺的履行/延期


    我无法评论上述方法是否是最佳实践,但我知道使用服务提供对某些数据/函数的访问是一种好的实践,例如,如果存在全局变量。

    您可以创建一个服务,从服务器加载配置并将其放在rootScope中,在控制器中,可以对函数调用此服务,也可以在视图中从ng init调用此函数

    看法

    您的服务(初始化应用程序)

    另一个提示

    如果异步调用遇到问题,可以尝试使用

    var deferred = $q.defer();
    
    //when your call come back
    deferred.resolve(yourData);
    
    //and in the last line of function
    deferred.promise; 
    

    您可以创建一个服务来从服务器加载配置并将其放在rootScope中,在控制器中,您可以在函数上调用此服务,在视图中从ng init调用此函数

    看法

    您的服务(初始化应用程序)

    另一个提示

    如果异步调用遇到问题,可以尝试使用

    var deferred = $q.defer();
    
    //when your call come back
    deferred.resolve(yourData);
    
    //and in the last line of function
    deferred.promise; 
    
    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;