使用打字稿时暴露angularjs控制器方法的最佳方法是什么?

时间:2015-05-29 10:20:44

标签: angularjs typescript

我知道这样做的一种方法是将控制器对象附加到范围,如下所示。

interface IAppCtrlScope extends ng.IScope {
   info: any;
}

class InfoCtrl {
    header: string;
    name: string;

    public static $inject = ["$scope"];
    constructor(private $scope: IAppCtrlScope) {        
       this.$scope.info= this; //expose controller
    }

    getData(): void {
      //do something
    }    
}

在这种情况下,视图将是这样的,

<div ng-controller="InfoCtrl">
    <div class="rm-dialog-header">{{info.header}}</div>
    <span ng-click="info.getData()">{{info.name}}</span>
</div>

而不是上面有一种方法来公开控制器,这样我就不必为每个范围变量添加前缀'info。'。所以视图将是这样的,

<div ng-controller="InfoCtrl">
    <div class="rm-dialog-header">{{header}}</div>
    <span ng-click="getData()">{{name}}</span>
</div>

是否可能或我遗失了什么?

1 个答案:

答案 0 :(得分:2)

您可以直接在$ scope

上公开类中的方法
interface IAppCtrlScope extends ng.IScope {
   getData: () => void;
}

class InfoCtrl {
    header: string;
    name: string;

    public static $inject = ["$scope"];
    constructor(private $scope: IAppCtrlScope) {        
       $scope.getData = this.getData; //expose method
    }

    getData = () => {
      //do something
    }    
}

然后在你的标记中你可以直接绑定到getData()

请确保使用语法method = () => {}声明方法,这会将方法放在实例而不是原型上。