2013-04-26 75 views
3

我们一直在用AngularJS开发一个大产品,并且最近试图在jsdoc注释的帮助下使用闭包编译器进行语法检查。在AngularJS中使用闭包编译器

我遇到了这个问题,无法找到任何帮助,包括在网上。

考虑写成的服务的模型类,并使用类名作为类型:

ourmodule.factory('OurModel', function() { 
    /** 
    * @constructor 
    */ 
    var OurModel = function() {}; 

    return OurModel; 
}); 

ourmodule.controller('Controller1', ['$scope', 'OurModel', function($scope, OurModel) { 
    /** 
    * @return {OurModel} 
    */ 
    $scope.getNewModel = function() { 
     return new OurModel(); 
    } 
}]); 

Closure编译器无法识别“OurModel”。我错过了什么?

+0

我想关闭编译器不能猜你注入到控制器的OurModel是你在工厂声明相同,angularJS注射模式使闭包编译器在这种情况下是无用的,我不确定是否有一种表示法来声明在控制器中收到的参数的类型以防止这种情况... – Guillaume86 2013-04-26 18:07:43

回答

1

Closure编译器无法猜测您注入到您的控制器的OurModel与您在工厂中声明的相同,在这种情况下angularJS注入模式使得闭包编译器无用。

如果您在父范围内声明OurModel,没有警告:

var ourmodule = { 
    factory: function(a, b){}, 
    controller: function(a, b){} 
}; 
/** 
* @constructor 
*/ 
var OurModel = function(){}; 

ourmodule.controller('Controller1', ['$scope', function($scope) { 
/** 
* @return {OurModel} 
*/ 
$scope.getNewModel = function() { 
return new OurModel(); 
} 
}]);