使用ng-annotate失败

时间:2015-04-05 13:05:34

标签: javascript angularjs

我正在尝试在我的角度应用程序中使用ng-annotate,但根本不起作用。

我有配置部分:

(function () {
    'use strict';


    angular.module('app')
        .config(/*@ngInject*/ routes);

    function routes ($stateProvider, $urlRouterProvider) {

        $stateProvider
            .state('home', {
                url: '/',
                templateUrl: 'app/main/view.html',
                controller: 'MainCtrl'
            });

        $stateProvider
            .state('signup', {
                url: '/signup',
                templateUrl: 'app/signup/view.html',
                controller: 'SignUpCtrl'
            });

        $urlRouterProvider.otherwise('/');
    }

})();

当我运行角度应用程序时,我收到了错误消息:

Error: [$injector:modulerr] Failed to instantiate module app due to:
[$injector:strictdi] routes is not using explicit annotation and cannot be invoked in strict mode
http://errors.angularjs.org/1.3.15/$injector/strictdi?p0=routes

和ng-annotate在我的gulp配置文件中实现:

gulp.task('html', ['inject', 'partials'], function () {
    var partialsInjectFile = gulp.src(options.tmp + '/partials/templateCacheHtml.js', { read: false });
    var partialsInjectOptions = {
      starttag: '<!-- inject:partials -->',
      ignorePath: options.tmp + '/partials',
      addRootSlash: false
    };

    var htmlFilter = $.filter('*.html');
    var jsFilter = $.filter('**/*.js');
    var cssFilter = $.filter('**/*.css');
    var assets;

    return gulp.src(options.tmp + '/serve/*.html')
      .pipe($.inject(partialsInjectFile, partialsInjectOptions))
      .pipe(assets = $.useref.assets())
      .pipe($.rev())
      .pipe(jsFilter)
      .pipe($.ngAnnotate())
      .pipe($.uglify({ preserveComments: $.uglifySaveLicense })).on('error', options.errorHandler('Uglify'))
      .pipe(jsFilter.restore())
      .pipe(cssFilter)
      .pipe($.csso())
      .pipe(cssFilter.restore())
      .pipe(assets.restore())
      .pipe($.useref())
      .pipe($.revReplace())
      .pipe(htmlFilter)
      .pipe($.minifyHtml({
        empty: true,
        spare: true,
        quotes: true,
        conditionals: true
      }))
      .pipe(htmlFilter.restore())
      .pipe(gulp.dest(options.dist + '/'))
      .pipe($.size({ title: options.dist + '/', showFiles: true }));
  }); 

我做错了什么?

1 个答案:

答案 0 :(得分:1)

通过ng-annotate -a example.jsnpm install -g ng-annotate首先)运行您的示例,您将看到路由已正确注释。如果您愿意,可以跳过/*@ngInject*/评论,不需要。

我猜你的问题是你正在做controller: 'MainCtrl'而不是controller: MainCtrl。 ng-annotate无法跟踪引用,如果它是一个字符串文字,那么更改它或确保在MainCtrl本身上做一个显式的ngInject。