2013-04-26 79 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(); 
} 
}]);