使用TypeScript和controllerAs将方法附加到控制器

时间:2016-05-12 13:37:51

标签: javascript angularjs typescript ecmascript-6

我已经看过几个使用TypeScript和角度控制器并通过范围like this one附加方法的例子。

但是,现在更好的做法是使用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

据我所知,使用controllerAs无法通过DOM获得添加到原型的方法。

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>

我现在如何通过DOM 访问somePublicMethod ? 或者更确切地说,当使用controllerAs语法时,如何在TypeScript(ES6)类中公开访问公共函数?

plunker显示我所看到的内容。

其他要点:

我知道publicprivateprotected实际上并没有改变代码的编译方式,只是在你错误地使用它时会发出警告。

1 个答案:

答案 0 :(得分:2)

$this->dbsections->set('SIZE', 'SIZE+1', FALSE);// third parameter FALSE
$this->dbsections->where('NAME', "ABC");
$this->dbsections->update('sections');
  

据我所知,使用controllerAs无法通过DOM获得添加到原型的方法。

他们是。这就是JS原型的工作方式。