Я использую angular с Closure, и у меня возникают проблемы с аннотацией @export. В частности, возможность экспортировать определения свойств. Я думал, что у меня что-то работает со следующим кодом, но он кажется очень темпераментным.
/**
* @export
* @constructor
*/
com.MyController = function() {
this.greeting = 'hello';
this.goodbye = 'bye'
};
/**
* @export
*/
com.MyController.prototype = {
'sayGoodbye': function() {
return this.goodbye;
},
'sayHello': function() {
return this.greeting;
}
};
Иногда компилятор экспортирует все методы прототипа, в других случаях он экспортирует только "sayGoodbye", а в других случаях он полностью сворачивает весь объект, определенный в прототипе.
Я знаю, что я могу сделать это:
/**
* @export
*/
com.MyController.prototype.sayHello = function() {
return this.greeting;
};
Что работает, однако становится очень трудоемким печатать это все время, когда оно становится менее читаемым.
Я знаю, что в компиляторе есть опция setExportLocalPropertyDefinitions, но в версии кода с открытым исходным кодом в настоящее время нет флага для установки этого - я возился с исходным кодом Java, чтобы попытаться установить это, но безуспешно, поэтому далеко.
Обновление: кажется, что методы прототипа (например, sayGoodbye) будут экспортированы, если в несвязанном классе есть другой метод с таким же именем. Я предполагаю, что его экспортируют не потому, что он определен как строка, как я изначально надеялся, а из-за некоторой путаницы между этими двумя несвязанными методами?