我決定添加描述更多的細節如何創建和使用控制器中的另一個答案TypeScript
並將其注入angularJS
。
這是這個答案
How can I define my controller using TypeScript?的擴展我們在那裏也有a working plunker
所以有這個指令:
export class CustomerSearchDirective implements ng.IDirective
{
public restrict: string = "E";
public replace: boolean = true;
public template: string = "<div>" +
"<input ng-model=\"SearchedValue\" />" +
"<button ng-click=\"Ctrl.Search()\" >Search</button>" +
"<p> for searched value <b>{{SearchedValue}}</b> " +
" we found: <i>{{FoundResult}}</i></p>" +
"</div>";
public controller: string = 'CustomerSearchCtrl';
public controllerAs: string = 'Ctrl';
public scope = {};
}
我們可以看到,我們宣佈這個指令可作爲E lement。我們還插入了模板。此模板已準備好綁定SearchedValue
,並調用我們的控制器上的操作Ctrl.Search()
。我們所說的是控制器的名稱:「CustomerSearchCtrl」,並要求運行,以使其可作爲「Ctrl鍵」 (conrollerAs :)
最後我們注入該對象轉變爲角模塊:
app.directive("customerSearch", [() => new CustomerSearch.CustomerSearchDirective()]);
我們可以用$scope
作爲ng.IScope
,但必須把它更多的類型化訪問,我們可以創建自己的接口:
export interface ICustomerSearchScope extends ng.IScope
{
SearchedValue: string;
FoundResult: string;
Ctrl: CustomerSearchCtrl;
}
這樣,W我知道,我們有字符串SearchedValue
和其他字符串FoundResult
。我們還通知應用程序Ctrl將被注入該範圍,並且將是類型CustomerSearchCtrl
。這裏談到的是控制器:
export class CustomerSearchCtrl
{
static $inject = ["$scope", "$http"];
constructor(protected $scope: CustomerSearch.ICustomerSearchScope,
protected $http: ng.IHttpService)
{
// todo
}
public Search(): void
{
this.$http
.get("data.json")
.then((response: ng.IHttpPromiseCallbackArg<any>) =>
{
var data = response.data;
this.$scope.FoundResult = data[this.$scope.SearchedValue]
|| data["Default"];
});
}
}
加上其註冊成模塊
app.controller('CustomerSearchCtrl', CustomerSearch.CustomerSearchCtrl);
有趣的是這個控制器上?它有一個公共行動搜索,它可以通過this.
訪問所有的成員,例如, this.$http
。因爲我們在VS指示智能感知是angular.d.ts鍵入/接口
protected $http: ng.IHttpService
將被使用,我們稍後可以輕鬆地訪問它的方法。類似的是返回值的.then()
.then((response: ng.IHttpPromiseCallbackArg<any>) => {...
其中確實包含數據類型:任何類型的{} ...
希望它可以幫助一點,觀察到所有action here
所以,我檢查/固定plunker,http://plnkr.co/edit/3XORgParE2v9d0OVg515?p=preview它應該工作,並顯示所有在行動..希望它可以幫助 –
偉大的幫助! Thanksssss @RadimKöhler –