带有ui-router的Angular 1.5组件解析:未知的提供程序

Al-Mothafar

我在将控制器转换为组件以为Angular 2准备应用程序时遇到问题,但是迁移无法顺利进行,我有ui-router在状态之间进行路由并在一些控制器(带有控制器的版本)中使用resolve可以正常工作,但是组件的版本现在可以正常工作了,我遵循了很多指南,似乎我对代码做得很好,但是对我来说不起作用。

我有以下模块控制器

(function () {
  'use strict';

  angular
    .module('app.sample', [])
    .config(config);

  /** @ngInject */
  $stateProvider
    .state('app.sample', {
      url    : '/sample',
      views  : {
        'content@app': {
          templateUrl: 'app/main/sample/sample.html',
            controller : 'SampleController as vm'
          }
        },
        resolve: {
          SampleData: function (myService) {
            return myService.getSample(); // I return a promise here
          }
       }
     });
  }
})();

控制器

(function ()
{
    'use strict';
    angular
        .module('app.sample')
        .controller('SampleController', SampleController);

    /** @ngInject */
    function SampleController(SampleData)
    {
        var vm = this;
        vm.helloText = SampleData.data.helloText;
    }
})();

上面的代码运行良好,但是在将其作为组件之后,它变成了这样:

(function () {
  'use strict';

  angular
    .module('app.sample', [])
    .config(config);

  /** @ngInject */
  function config($stateProvider) {
    // State
    $stateProvider
      .state('app.sample', {
        url: '/sample',
        views: {
          'content@app': {
            template: '<sample></sample>'
          }
        },
        resolve: {
          SampleData: function (myService) {
            return myService.getSample(); // I return a promise here
          }
        }
      });
  }
})();

组成部分

(function () {
  'use strict';

  angular
    .module('app.sample')
    .component('sample', {
      templateUrl: 'app/main/sample/sample.html',
      bindings: {
      },
      controller: Sample
    });

  /** @ngInject */
  function Sample(SampleData) {
    var $ctrl = this;
    $ctrl.helloText = SampleData.data.helloText;
  }
})();

但现在它无法正常工作,并给我以下错误:

Error: [$injector:unpr] Unknown provider: SampleDataProvider <- SampleData
http://errors.angularjs.org/1.5.7/$injector/unpr?p0=SampleDataProvider%20%3C-%20SampleData
    at angular.js:68
    at angular.js:4502
    at Object.getService [as get] (angular.js:4655)
    at angular.js:4507
    at getService (angular.js:4655)
    at injectionArgs (angular.js:4679)
    at Object.invoke (angular.js:4701)
    at $controllerInit (angular.js:10234)
    at nodeLinkFn (angular.js:9147)
    at angular.js:9553

我在bower.json中的依赖

"dependencies": {
    "angular": "1.5.7",
    "angular-animate": "1.5.7",
    "angular-aria": "1.5.7",
    "angular-cookies": "1.5.7",
    "angular-material": "1.1.0-rc.5",
    "angular-messages": "1.5.7",
    "angular-resource": "1.5.7",
    "angular-sanitize": "1.5.7",
    "angular-ui-router": "1.0.0-beta.1",
    "jquery": "2.2.4",
    "mobile-detect": "1.3.2",
    "moment": "2.13.0"
  }

知道什么问题,我缺少什么吗?

Al-Mothafar

终于解决了,我误解了组件的工作方式。

首先,我的变化SampleDatasampleData,Pascal大小写但第一个字母小。

然后里面module我改变了templatetemplate: '<sample sample-data="$resolve.sampleData"></sample>'

resolve

resolve: {
  sampleData: function (msApi) {
    return msApi.resolve('sample@get');
  }
}

因为component我也更改了绑定:

bindings: {
  sampleData: '='
},

在的中controllercomponentSampleData从签名中删除并这样称呼它$ctrl.helloText = $ctrl.sampleData.data.helloText;

所以现在的最终代码就像:对于模块

 (function () {
  'use strict';

  angular
    .module('app.sample', [])
    .config(config);

  /** @ngInject */
  function config($stateProvider) {
    // State
    $stateProvider
      .state('app.sample', {
        url: '/sample',
        views: {
          'content@app': {
            template: '<sample sample-data="$resolve.sampleData"></sample>'
          }
        },
        resolve: {
          sampleData: function (myService) {
            return myService.getSample(); // I return a promise here
          }
        }
      });
  }
})();

和这样的组件

(function () {
  'use strict';

  angular
    .module('app.sample')
    .component('sample', {
      templateUrl: 'app/main/sample/sample.html',
      bindings: {
        sampleData: '='
      },
      controller: Sample
    });

  /** @ngInject */
  function Sample() {
    var $ctrl = this;
    $ctrl.helloText = $ctrl.sampleData.data.helloText;
  }
})();

终于工作了。

编辑: PS:在问答范围之外,如果您也使用无状态组件,则需要在控制器内部获取数据而不是解析,因此您可以在任何需要的地方调用组件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将resolve参数传递给UI Router中的angular1组件

来自分类Dev

Angular 2.0(带有ui-router的1.5)组件创建

来自分类Dev

Angular 2.0(带有ui-router的1.5)组件创建

来自分类Dev

Angular UI-Router无法从其父状态解析子状态(带有动态URL参数)

来自分类Dev

Angular 1.5组件中的Angular Bootstrap Modal $ uibModalInstance未知提供程序

来自分类Dev

AngularJS-带有Angular UI引导程序的指令

来自分类Dev

带有ng-model的Angular 1.5组件

来自分类Dev

Angular 1组件与指令定义

来自分类Dev

如何使用Angular UI Router解析所有状态的数据?

来自分类Dev

带有ng-enter-stagger的Angular UI Router

来自分类Dev

带有 Materialize-angular 问题的 Angularjs ui-router

来自分类Dev

Angular [$ injector:unpr]带有定制指令的未知提供程序

来自分类Dev

Angular [$ injector:unpr]带有定制指令的未知提供程序

来自分类Dev

Angular UI Bootstrap Typeahead,带有1个用逗号分隔的对象:Key:Values

来自分类Dev

Angular UI-Router解析可选参数

来自分类Dev

angular-ui-router:解析根状态

来自分类Dev

Angular UI Router:1条路由有效,下一条无效

来自分类Dev

在没有升级插件的情况下使用angular 1应用中的angular 2组件

来自分类Dev

在新的Angular Router(3.0.0-rc.1)中重用组件

来自分类Dev

在新的Angular Router(3.0.0-rc.1)中重用组件

来自分类Dev

Angular UI-Router,父UI视图呈现,但带有模板的子视图不呈现

来自分类Dev

带有默认视图的angular-ui / ui-router父状态

来自分类Dev

在控制器中使用服务时,使用Angular ui-router时出现“未知提供程序”错误

来自分类Dev

Angular 1组件路由器查询参数

来自分类Dev

Angular 1组件路由器查询参数

来自分类Dev

如何在ES5中将升级的Angular 1服务/工厂注入Angular 2组件?

来自分类Dev

如何npm发布带有单独的templateUrl html文件的Angular2组件?

来自分类Dev

带有路由器出口的Angular2组件通信

来自分类Dev

带有选择器的Angular2组件不在html中

Related 相关文章

  1. 1

    将resolve参数传递给UI Router中的angular1组件

  2. 2

    Angular 2.0(带有ui-router的1.5)组件创建

  3. 3

    Angular 2.0(带有ui-router的1.5)组件创建

  4. 4

    Angular UI-Router无法从其父状态解析子状态(带有动态URL参数)

  5. 5

    Angular 1.5组件中的Angular Bootstrap Modal $ uibModalInstance未知提供程序

  6. 6

    AngularJS-带有Angular UI引导程序的指令

  7. 7

    带有ng-model的Angular 1.5组件

  8. 8

    Angular 1组件与指令定义

  9. 9

    如何使用Angular UI Router解析所有状态的数据?

  10. 10

    带有ng-enter-stagger的Angular UI Router

  11. 11

    带有 Materialize-angular 问题的 Angularjs ui-router

  12. 12

    Angular [$ injector:unpr]带有定制指令的未知提供程序

  13. 13

    Angular [$ injector:unpr]带有定制指令的未知提供程序

  14. 14

    Angular UI Bootstrap Typeahead,带有1个用逗号分隔的对象:Key:Values

  15. 15

    Angular UI-Router解析可选参数

  16. 16

    angular-ui-router:解析根状态

  17. 17

    Angular UI Router:1条路由有效,下一条无效

  18. 18

    在没有升级插件的情况下使用angular 1应用中的angular 2组件

  19. 19

    在新的Angular Router(3.0.0-rc.1)中重用组件

  20. 20

    在新的Angular Router(3.0.0-rc.1)中重用组件

  21. 21

    Angular UI-Router,父UI视图呈现,但带有模板的子视图不呈现

  22. 22

    带有默认视图的angular-ui / ui-router父状态

  23. 23

    在控制器中使用服务时,使用Angular ui-router时出现“未知提供程序”错误

  24. 24

    Angular 1组件路由器查询参数

  25. 25

    Angular 1组件路由器查询参数

  26. 26

    如何在ES5中将升级的Angular 1服务/工厂注入Angular 2组件?

  27. 27

    如何npm发布带有单独的templateUrl html文件的Angular2组件?

  28. 28

    带有路由器出口的Angular2组件通信

  29. 29

    带有选择器的Angular2组件不在html中

热门标签

归档