Я видел пару примеров использования TypeScript с контроллером angular и присоединения методов через область действия как этот.
Однако сейчас лучше использовать controllerAs
.
Учитывая следующий TypeScript (при условии, что он был правильно зарегистрирован как контроллер в другом месте и т. д.):
class exampleCtrl {
public publicArray = [1,2,3];
public somePublicMethod() {
window.console.log('ran function')
}
}
Это производит:
var exampleCtrl = (function () {
function exampleCtrl() {
this.publicArray = [1, 2, 3];
}
exampleCtrl.prototype.somePublicMethod = function () {
window.console.log('ran function');
};
return exampleCtrl;
}());
Обратите внимание, что somePublicMethod
добавлено к прототипу, а publicArray
добавлено непосредственно к this
.
Насколько я могу судить, методы, добавленные в прототип, недоступны через DOM с помощью controllerAs.
e.g
<div ng-controller="exampleCtrl as vm">
{{vm}} <!-- No function is output just {"publicArray":[1,2,3]} -->
<div ng-click="vm.somePublicMethod">Click me</div> <!-- click event doesn't work -->
</div>
Как мне теперь получить доступ к somePublicMethod
через DOM? Или, скорее, как я могу сделать публичную функцию в классе TypeScript (ES6) общедоступной при использовании синтаксиса controllerAs?
plunker, чтобы показать, что я вижу.
Другие пункты:
Я знаю, что public
, private
и protected
на самом деле не меняют способ транспиляции кода, они просто предупреждают вас, если вы используете их неправильно.