Lampirkan metode ke pengontrol menggunakan TypeScript dan controllerAs

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.


person Matt Lishman    schedule 12.05.2016    source sumber


Jawaban (1)


It is

<div ng-click="vm.somePublicMethod()">Click me</div>

Sejauh yang saya tahu, metode yang ditambahkan ke prototipe tidak tersedia melalui DOM menggunakan controllerAs.

Mereka. Begitulah cara kerja prototipe JS.

person Estus Flask    schedule 12.05.2016
comment
Oh ups, kesalahan sederhana saat membuat contoh terisolasi. Saya pikir itulah masalahnya. Namun perlu diketahui bahwa itu mungkin. Saya kira ada masalah di tempat lain di aplikasi saya. Terima kasih. - person Matt Lishman; 12.05.2016