【问题标题】:adding resolver to angular routeProvider in config在配置中将解析器添加到角度 routeProvider
【发布时间】:2017-01-03 07:29:19
【问题描述】:

我开始使用 angular 1.x 样板并遇到 1 个问题,我无法从服务发送到解析器承诺

function ExampleService($http) {
'ngInject';

const service = {};
let getTasks = ()=> {
    return $http.get('tasks');
};

service.isReady = new Promise((resolve, reject)=> {
    getTasks().then(
        (data) => {
            resolve(data);
        },
        (err, status) => {
            reject(err, status);
        });
});

return service;

}

导出默认{ 名称:“示例服务”, fn:示例服务 }; 但是当我尝试向 on_config.js 注入 ,y 服务时出现错误

未捕获的错误:[$injector:modulerr] 无法实例化模块应用程序,原因是: 错误:[$injector:unpr] 未知提供者:ExampleService

我的状态提供者

$stateProvider
    .state('Home', {
    url: '/',
    controller: 'ExampleCtrl as home',
    templateUrl: 'home.html',
    title: 'Home',
    resolve:{example:ExampleService.isReady}
    })

也许我做错了什么,或者您可以建议我如何在渲染第一个控制器之前执行逻辑以将一些数据预加载到应用程序

附:链接到bolerplate

【问题讨论】:

  • 确保您使用以下代码注册服务angular.module('app').service(ExampleService)

标签: angularjs service boilerplate resolver


【解决方案1】:

服务不能注入配置块。它们需要注入解析器函数:

$stateProvider
    .state('Home', {
    url: '/',
    controller: 'ExampleCtrl as home',
    templateUrl: 'home.html',
    title: 'Home',
    resolve:{
       example: function (ExampleService) {
           return ExampleService.isReady();
       }
    })

另外isReady 需要是一个函数,而不是一个新的承诺:

service.isReady = () => {
    return getTasks().then(response => response.data);
}

【讨论】:

  • 谢谢你,它真的对我有帮助,但是你能解释一下(或给出解释的链接)为什么 isReady 应该是一个函数
猜你喜欢
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2014-11-19
相关资源
最近更新 更多