當前位置:編程學習大全網 - 源碼下載 - 如何用TypeScript編寫AngularJS控制器

如何用TypeScript編寫AngularJS控制器

AngularJS有很多強大的功能,其中之壹就是控制器。在本文中,我將介紹如何使用TypeScript編寫AngularJS的控制器。

控制器通常用於增強AngularJS範圍。

。當控制器通過ng-controller時。

當指令連接到DOM時,Angular將使用指定的Controller函數初始化壹個新的控制器對象。壹個新的子作用域將被創建為$scope。

變量被註入到控制器的構造函數中。

將控制器連接到視圖有兩種選擇,壹種是將控制器作為語法使用,另壹種是使用$scope。

。如果使用控制器語法,控制器實例將被分配壹個新範圍的屬性。

要知道類型定義,看看這個神奇的倉庫。

,它收集了幾乎所有流行的JavaScript庫。這些類型定義允許我們獲得任何編譯時錯誤和IDE。

智能支持基於。我用的是Visual Studio和Visual Code,兩者對TypeScript都有很好的支持。

如上所述,AngularJS將在需要時創建壹個控制器實例。因此,控制器可以使用

定義了TypeScript中的類。我們知道,壹個類可以被實例化。讓我們在視圖中使用控制器

將儀表板控制器定義為壹種語法方法。以下代碼不使用$scope。

服務。

接口IDashboardVm {

新聞:{標題:字符串,描述:字符串};

message count:number;

人物:數組& lt任何& gt;

標題:字符串;

getMessageCount:()= & gt;ng。IPromise & lt編號& gt;

get people:()= & gt;ng。IPromise & lt數組& lt任何& gt& gt;

}

DashboardController類實現IDashboardVm {

static $ inject:Array & lt;字符串& gt=[' data service '];

構造函數(私有數據服務:app.core.IDataService) {

this . getmessagecount();

this . get people();

}

新聞= {

標題:“新聞”,

描述:“內部服務器團隊對AngularJS、TypeScript & amp' JavaScript '

};

message count:number = 0;

人物:數組& lt任何& gt= [];

hubs summary:Array & lt;任何& gt= [];

title:string = ' Dashboard ';

getMessageCount() {

返回this . data service . getmessagecount()。然後((數據)= & gt{

this.messageCount = data

返回this.messageCount

});

}

getPeople() {

返回this.dataservice.getPeople()。然後((數據)= & gt{

this.people = data

返回this.people

});

}

}

angular . module(“app . dashboard”)。控制器(“DashboardController”,dashboard controller);

利用TypeScript的強類型特征,最好創建壹個包含與視圖相關的所有成員和行為的接口。這使得為控制器定義壹個實現變得容易,並且如果需要的話,這個接口可以被做成壹個抽象方法在其他地方使用。所以,在上面的代碼中,我創建了壹個名為IDashboardVm的文件。

的接口。

接下來,它被稱為DashboardController。

的控制器實現此接口,並為每個成員定義默認狀態。看看這個類的靜態變量$inject

,它告訴AngularJS DI。

初始化這個控制器之前註入了哪些依賴?然後,當參數被註入到這些參數中時,構造函數以與所需依賴項相同的順序定義這些參數。

該類中提到的依賴關系非常簡單,假設是dataservice。

是壹個定制的AngularJS服務,它封裝了對服務器的所有HTTP請求。根據接口中的每個定義,接下來我們需要定義這些行為的實現,並在內部調用dataservice。

方法。它使用承諾。

返回要分配給控制器成員的響應,以便以後控制狀態。

真正重要的是用Angular的模塊API註冊這個控制器。

的位置。在上面的代碼中,首先定義類,然後完成它的註冊。如果這個命令被交換,Angular就找不到我們的控制器了。

已經實現了。在使用JavaScript構造函數時,可以很好地解決問題,因為函數提升起著重要的作用。

下面是這個控制器在Angular-UI UI-Router中的工作方式。

中使用的代碼片段,但如果您想使用Angular的內置路由模塊,概念是相同的。請註意,這只顯示了controllerAs的用法。

語法來配置部件。

配置:{

URL:“/”,

templateUrl:'應用程序/儀表板/儀表板. html ',

控制器:'儀表板控制器',

控制器:“虛擬機”,

標題:“儀表板”,

}

如果妳想使用$ TERM的$ TERM範圍

服務,那麽您可以像下面的代碼片段那樣擴展上面的接口。這將確保IScope的所有成員都能通過該接口訪問它。使用這個方法還需要改變控制器類的實現,因為現在需要$scope。

服務的依賴性。然後,自定義接口類型可以在構造函數中使用$scope。

參數是強類型的,並且受到智能支持。

IDashboardVm接口擴展了angular。IScope {

新聞:{標題:字符串,描述:字符串};

message count:number;

人物:數組& lt任何& gt;

標題:字符串;

getMessageCount:()= & gt;ng。IPromise & lt編號& gt;

get people:()= & gt;ng。IPromise & lt數組& lt任何& gt& gt;

}

  • 上一篇:廣州深圳這邊比較有實力,待遇比較好的IT公司有哪些
  • 下一篇:ps壹鍵摳圖插件-ps2021摳圖用什麽插件
  • copyright 2024編程學習大全網