AngularJS $ stateProvider не работает с компонентом

0

Я новичок как с ES6, так и с AngularJS, и у меня проблема с государственным провайдером (или с чем-то связанным с ним). Я пытаюсь создать приложение, следуя структуре проекта, представленной в репозитории GitHub, который я нашел:

https://github.com/AngularClass/NG6-starter

Проблема возникает, когда я пытаюсь назначить мой компонент состоянию $stateProvider.

Это код, который не работает:

import angular from 'angular';
import uiRouter from 'angular-ui-router';
import homepageComponent from './homepage.component';

const moduleName = 'app.components.homepage';

let homepageModule = angular.module(moduleName, [
  uiRouter
])
.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
  'ngInject';

  $stateProvider
    .state('homepage', {
      url: '/',
      component: 'homepage'
    });

  $urlRouterProvider.otherwise('/');
}])
.component('homepage', homepageComponent)
.name;

export default homepageModule;

Я мог предположить, что в приложении есть что-то еще не так, но когда я заменяю эту "компонентную вещь" базовыми заданиями, она работает нормально.

Код, который действительно работает:

import angular from 'angular';
import uiRouter from 'angular-ui-router';
import template from './homepage.html';
import controller from './homepage.controller';

const moduleName = 'app.components.homepage';

let homepageModule = angular.module(moduleName, [
  uiRouter
])
.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
  'ngInject';

  $stateProvider
    .state('homepage', {
      url: '/',
      restrict: 'E',
      bindings: {},
      template: template,
      controller: controller,
      controllerAs: '$ctrl'
    });

  $urlRouterProvider.otherwise('/');
}])
.name;

export default homepageModule;

И вот код homepage.component.js:

import template from './homepage.html';
import controller from './homepage.controller';
import './homepage.scss';

let homepageComponent = {
  restrict: 'E',
  bindings: {},
  template,
  controller
};

export default homepageComponent;

Когда я вставляю <homepage></homepage>, он просто работает. Может ли кто-нибудь рассказать мне, в чем разница между этими двумя способами и что я делаю неправильно?

КСТАТИ. Кто-нибудь знает, почему существует это .name в конце файлов (в репо)?

Теги:
ecmascript-6

1 ответ

1
Лучший ответ

Вы не можете добавить свой компонент, как это, состояние связано с шаблоном. Эта функция будет добавлена в следующей версии (1.0.0)

cf: https://github.com/angular-ui/ui-router/issues/2547

Использование свойства .name позволяет избежать дублирования строк. Вы можете вызвать свой компонент homepage.name

  • 1
    да, но они используют "angular-ui-router": "^1.0.0-beta.1", Вы можете проверить в их package.json
  • 0
    Я просто потратил ~ 3 часа своей жизни на это. Спасибо :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню