2015-04-05 41 views
0

我想在我的角度應用程序上使用ng-annotate,但根本不起作用。使用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-註釋在我一飲而盡配置實現文件:

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

通過ng-annotate -a example.js(首先是npm install -g ng-annotate)運行您的示例,您將看到路由已正確註釋。如果你願意,你可以跳過/*@ngInject*/的評論,這是不需要的。

我猜你的問題是你在做controller: 'MainCtrl'而不是controller: MainCtrl。如果它是一個字符串文字,ng-annotate沒有辦法跟隨引用,所以改變它或確保在MainCtrl本身上執行顯式的ngInject。