【问题标题】:Defer template loading when using ng-controller使用 ng-controller 时延迟模板加载
【发布时间】:2013-03-26 09:38:55
【问题描述】:

我正在尝试推迟加载我的主控制器/模板 (AppController),直到我从服务加载用户配置文件。

对于所有导航路线,我使用 $routeProvider 和 resolve

.when('/edit/:editId', {
    templateUrl: 'editTemplate.html',
    controller: 'EditController' // this is a child controller of AppController
    resolve: {
         currentUser: ['svc.user', function(userSvc) { return userService.getUser(); }]
    }
// and so on..

但是对于我正在使用的 AppController

如何解决 AppController?本质上,我想要一个 userService.getUser() 它返回一个承诺在 AppController 实际运行之前完成执行,但我不确定如何使用 ng-init 来执行此操作(或者如果可能,我认为只有表达式不是承诺可以被执行)。

感谢您的任何帮助/协助。

【问题讨论】:

  • 观看此视频egghead.io/video/angularjs-resolve 并在此处查看有关您的确切问题的良好演示:github.com/johnlindquist/angular-resolve
  • 感谢 charlietfl - 所以我需要隐藏的“应用程序”承诺。谢谢!
  • no...应该解决服务的承诺。看看演示中是如何完成的:github.com/johnlindquist/angular-resolve/blob/master/client/js/…
  • 是的,但是我发现你也可以在里面放一个模块。因此,在他们的情况下,他们将引用传递给 app.在我的代码中,我使用带有 requirejs 的缩小代码,所以我使用的是字符串文字。所以我有一个“app.core”模块。我使用 'app.core' : { // resolve stuff } 确保当它获得核心时,它也会缓存用户......除非我完全错了?!?希望不要

标签: angularjs


【解决方案1】:

如本视频所示:http://egghead.io/video/angularjs-resolve/

你应该试试:

.when('/edit/:editId', {
  templateUrl: 'editTemplate.html',
  controller: 'EditController' // this is a child controller of AppController
  resolve: {
     currentUser: ['svc.user', function(userSvc) { return userService.getUser(); }]
     app: function ($q) {
                var defer = $q.defer();
                defer.resolve();
                return defer.promise;
     }
}

【讨论】:

  • 应该兑现userService 的承诺,而不是随意创造一个
猜你喜欢
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多