【问题标题】:Controller doesn't find resolve method控制器找不到解决方法
【发布时间】:2015-10-09 21:05:21
【问题描述】:

我试图在加载视图之前从 API 获取一些配置设置,这样我就不会因为尝试使用未定义的数据而出现十亿个插值错误。该应用程序不会因为错误而崩溃,但我仍然需要摆脱错误。

我想在加载视图之前我会使用解析并等待配置方法解析,但我无法将数据获取到我的控制器,以便我可以在那里使用它。我一直在研究其他问题,显然这是你应该这样做的方式。我到底做错了什么?

问题是在api 工厂中不是api.getConfig()$http.get 请求的承诺返回到外部 API 就好了,所以我不会包含函数 sn-在这里。

在我的路由中:

.when('/:category/top_rated', {
  templateUrl: 'views/pages/results.html',
  resolve: {
    'isAuth': ['fbRefs', function(fbRefs) {
      return fbRefs.getAuthObj().$requireAuth();
    }],
    'getConfig': ['api', function(api) {

      api.getConfig().then(function(data) {
        return data;
      });
    }]
  }
})

然后在我的控制器中我像这样注入它:

core.controller('MainCtrl', ['getConfig', function(getConfig) {

  getConfig.then(function(data) {
    console.log(data);
  });

}]);

但是,这会引发 $injector:unpr 错误。为什么找不到resolve方法?

【问题讨论】:

  • 你能把控制器绑定到when语句吗?控制器:'MainCtrl',resolve /* ... */
  • @cyan 我的模板使用了另一个控制器,所以我无法这样做。无论如何我都试过了,但仍然出现同样的错误。
  • 存在依赖注入问题
  • 控制器在哪里声明?似乎没有在需要的路由中声明
  • @charlietfl 它位于我的 html 标签上。我也尝试过在控制器中声明,但什么也没做。

标签: angularjs routing resolve


【解决方案1】:

你的控制器应该在路由器中声明,否则控制器没有'getConfig'来自的上下文,因此注入器错误。

.when('/:category/top_rated', {
  templateUrl: 'views/pages/results.html',
  controller: 'MainCtrl',
  resolve: {
    'isAuth': ['fbRefs', function(fbRefs) {
      return fbRefs.getAuthObj().$requireAuth();
    }],
    'getConfig': ['api', function(api) {

      api.getConfig().then(function(data) {
        return data;
      });
    }]
  }
})

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2014-03-09
    相关资源
    最近更新 更多