Я прошел через сообщения о неправильной инъекции зависимостей и возникающих ошибках в минифицированном коде и не смог понять, почему я получаю его здесь.ngAnnotate не работает на ES6-классах без методов экземпляра
это производит $injector:unpr
ошибку, когда уменьшенная
// Projects.projects = ['array', 'of', 'stuff']
import { Projects } from './projects';
export class PortfolioController
{
/* @ngInject */
constructor($state)
{
this.$state = $state;
this.projects = new Projects().projects;
}
}
это minifies без ошибок
import { Projects } from './projects';
export class PortfolioController
{
/* @ngInject */
constructor($state)
{
this.$state = $state;
this.projects = new Projects().projects;
this.Init();
}
Init()
{
this.$state.name === 'portfolio' ?
console.log('PortfolioController instantiated') :
console.log('no-go');
}
}
регистрация контроллер/состояние конфигурации в случае, который помогает
'use strict';
import { PortfolioController } from './portfolio.controller';
angular.module('myApp')
.controller('PortfolioController', PortfolioController)
.config(['$stateProvider', Config]);
function Config($stateProvider)
{
// NOTE: adding this fixes the issue, but this does not seem like an ideal scenario
PortfolioController.$inject = ['$state'];
$stateProvider
.state('portfolio',
{
url: '/portfolio',
views: {
'portfolio': {
templateUrl: 'app/portfolio/views/portfolio.html',
controller: PortfolioController,
controllerAs: 'vm'
}
}
});
}
Идеи?
обновление - подумал, что может быть полезно включить модуль setter
.
'use strict';
angular.module('myApp', ['ngCookies', 'ngResource', 'ngSanitize', 'ui.router', 'ui.bootstrap', 'ngAnimate'])
.config(['$urlRouterProvider', '$locationProvider', '$animateProvider', Config])
.run(['$rootScope', '$state', Run]);
function Config($urlRouterProvider, $locationProvider, $animateProvider)
{
// basic ui.router config
}
function Run($rootScope, $state)
{
// actions that occur when the app runs
}
Have Вы сравнили unminified выход, чтобы увидеть, если '/ * @ngInject * /' еще в разумное место после того, как Вавилон обработал файл? – loganfsmyth
Я не уверен, что было бы необоснованным размещением, но после того, как код прошел через Babel и Browserify, '/ * @ ngInject * /' над этой строкой: 'export.PortfolioController = function PortfolioController ($ state) {. ..}; ' – MyCompassSpins
Я обнаружил (используя' ng-di-strict' в dev), что он работает, если я поместил 'PortfolioController. $ Injection = ['$ state'];' в мою конфигурационную функцию состояния. Впрочем, это тоже не идеально. , , – MyCompassSpins