我知道这样做的一种方法是将控制器对象附加到范围,如下所示。
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>
是否可能或我遗失了什么?
答案 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 = () => {}
声明方法,这会将方法放在实例而不是原型上。