Saya telah melihat beberapa contoh penggunaan TypeScript dengan pengontrol sudut dan melampirkan metode melalui cakupan seperti ini.
Namun, sekarang praktik yang lebih baik adalah menggunakan controllerAs
.
Mengingat TypeScript berikut (dengan asumsi itu telah terdaftar dengan benar sebagai pengontrol di tempat lain, dll.):
class exampleCtrl {
public publicArray = [1,2,3];
public somePublicMethod() {
window.console.log('ran function')
}
}
Ini menghasilkan:
var exampleCtrl = (function () {
function exampleCtrl() {
this.publicArray = [1, 2, 3];
}
exampleCtrl.prototype.somePublicMethod = function () {
window.console.log('ran function');
};
return exampleCtrl;
}());
Perhatikan bagaimana somePublicMethod
ditambahkan ke prototipe, namun publicArray
ditambahkan langsung ke this
.
Sejauh yang saya tahu, metode yang ditambahkan ke prototipe tidak tersedia melalui DOM menggunakan 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>
Bagaimana sekarang saya dapat mengakses somePublicMethod
melalui DOM? Atau lebih tepatnya, bagaimana saya bisa membuat fungsi publik di kelas TypeScript (ES6) dapat diakses publik saat menggunakan sintaks controllerAs?
plunker untuk menunjukkan apa yang saya lihat.
Poin lainnya:
Saya tahu public
, private
dan protected
sebenarnya tidak mengubah cara transpilasi kode, ini hanya memperingatkan Anda jika Anda salah menggunakannya.