I am Playing around with Type Script.I have convert my angular js controller to Type Script But i m facing problem in ng-repeater. (I have attached my controller code below:-
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
){}
Data binding is the core concept of Angular 8 and used to define the communication between a component and the DOM. It is a technique to link your data to your view layer. In simple words, you can say that data binding is a communication between your typescript code of your component and your template which user sees.
Data binding in concept is quite simple. On one side, you have a data model and on the other side, you have an interface, often called a view. The idea is that you want to “bind” some piece of data to something on the view so that when the data changes, the view changes. This is typical for read-only data.
The syntax for in Angular is *ngFor = "let I of months" and to get the value of months we are displaying it in {{i}}. The two curly brackets help with data binding. You declare the variables in your app.
Data binding in AngularJS is the synchronization between the model and the view. When data in the model changes, the view reflects the change, and when data in the view changes, the model is updated as well.
I decided to add another answer describing more details how to create and use controller in TypeScript
and inject it into angularJS
.
This is extension of this Answer
How can I define my controller using TypeScript? Where we also have a working plunker
So having this directive:
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 = {};
}
We can see, that we declared this directive to be available as Element. We also in-lined a template. This template is ready to bind SearchedValue
and call Action on our controller Ctrl.Search()
. We are saying what is the name of controller: 'CustomerSearchCtrl' and asking runtime to make it available as 'Ctrl' (conrollerAs:)
Finally we inject that object into angular module:
app.directive("customerSearch", [() => new CustomerSearch.CustomerSearchDirective()]);
We can use $scope
as ng.IScope
, but to have more typed access to it, we can create our own interface:
export interface ICustomerSearchScope extends ng.IScope
{
SearchedValue: string;
FoundResult: string;
Ctrl: CustomerSearchCtrl;
}
This way, we know, that we have string SearchedValue
and also other string FoundResult
. We also informed the application that Ctrl will be injected into that scope, and will be of type CustomerSearchCtrl
. And here comes that controller:
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"];
});
}
}
plus its registration into module
app.controller('CustomerSearchCtrl', CustomerSearch.CustomerSearchCtrl);
What is interesting on this controller? it has one public acton Search, which has access to all its membes via this.
, e.g. this.$http
. Because we instructed intellisense in VS that angular.d.ts type/interface
protected $http: ng.IHttpService
will be used, we can later easily access its methods. Similar is the type of returned value in .then()
.then((response: ng.IHttpPromiseCallbackArg<any>) => {...
which does contain data: {} of any type...
Hope it helps a bit, observe that all in action here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With