如何使用TypeScript Controller&Angular Js绑定数据
我正在玩typesScript.I已经转换我的angular度js控制器到types脚本但im面临问题,在中继器。 (我附上了我的控制器代码如下: –
class CustomCtrl{ public customer; public ticket; public services; public cust_File; public ticket_file; public service_file; static $inject = ['$scope', '$http', '$templateCache']; constructor ( private $http, private $templateCache ){}
我决定添加另一个描述更多细节的答案,如何在TypeScript
创build和使用控制器,并将其注入到angularJS
。
这是这个答案的延伸
我怎样才能使用TypeScript定义我的控制器? 我们也有一个工作的重要人物
所以有这个指令:
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 = {}; }
我们可以看到,我们宣布这个指令是可用的。 我们还插入了一个模板 。 这个模板准备绑定Ctrl.Search()
并且在我们的控制器Ctrl.Search()
上调用Action。 我们正在说什么是控制器的名称:“CustomerSearchCtrl”,并要求运行时,使其可用作为“Ctrl” (conrollerAs 🙂
最后我们将该对象注入angular度模块:
app.directive("customerSearch", [() => new CustomerSearch.CustomerSearchDirective()]);
我们可以使用$scope
作为ng.IScope
,但为了获得更多的types访问权限,我们可以创build自己的接口 :
export interface ICustomerSearchScope extends ng.IScope { SearchedValue: string; FoundResult: string; Ctrl: CustomerSearchCtrl; }
这样,我们知道,我们有stringFoundResult
和其他stringFoundResult
。 我们还通知应用程序Ctrl将被注入到该范围,并将是typesCustomerSearchCtrl
。 这里是控制器:
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);
这个控制器有趣的是什么? 它有一个公共行动search,通过它可以访问所有的成员this.
,例如this.$http
。 因为我们在VS中指出了intellisense angular.d.tstypes/接口
protected $http: ng.IHttpService
将被使用,我们可以在以后轻松访问它的方法。 .then()
的返回值的types类似
.then((response: ng.IHttpPromiseCallbackArg<any>) => {...
其中包含任何types的数据{} …
希望它有所帮助,观察这一切行动
你的构造函数和$inject
有一个问题 – 这些必须合在一起
// wrong static $inject = ['$scope', '$http', '$templateCache']; constructor ( private $http, private $templateCache ){} // should be static $inject = ['$scope', '$http', '$templateCache']; constructor ( private $scope, private $http, private $templateCache ){}
事实上发生了什么 – 所有的参数都被移动了,
$http
实际上就是$scope
,等等…
简单地说, $inject
数组必须适合构造函数参数列表
顺便说一句,这就是为什么我以前在这里: https : //stackoverflow.com/a/30482388/1679310build议在声明中使用types:
constructor(protected $scope: ICustomerScope, protected $http: ng.IHttpService, protected $templateCache: ng.ITemplateCacheService) { ... }
库Bindable TS是与打字机build立数据绑定的另一种方法。
从快速审查您的代码,我发现控制器的search
方法是私人的。 可能将其改为公众将解决问题。