Javascript AngularJS uygulama denetleyicimi Typescript kullanacak şekilde nasıl dönüştürebilirim?
AngularJS tanımlarını zaten ekledim. Şu anda uygulama denetleyicim şöyle görünüyor:
app.controller('appController',
[
'$scope',
'$state',
'utilityService',
appController
]);
function appController(
$scope: ng.IScope,
$state,
utilityService
) {
var app = this;
$scope.broadcast = function (val) {
$scope.$broadcast('broadcast', val);
};
if (app.auth.user.isAuthenticated()) {
app.state.text = null;
$state.transitionTo('home.content', { content: 'overview' });
} else {
$state.transitionTo('authentication');
// app.auth.loginData = app.cache.get('loginData');
app.state.text = "Please Login ...";
}
}
TS'den tam anlamıyla faydalanmak istiyorsam sınıfa mı dönüştürmeliyim ve öyleyse broadcast fonksiyonu gibi fonksiyonların tanımını nasıl ele almalıyım?
Cevap #1
İşte ilke
app.controller('appController', AppController);
interface AppControllerScope extends ng.IScope{
vm: AppController;
}
class AppController{
text: string;
static $inject=[
'$scope',
'$state',
'utilityService'
]
constructor(
public $scope: AppControllerScope,
public $state,
public utilityService: UtilityService
) {
$scope.vm = this;
// NOTE: unclear what app is, perhaps its a service?
if (app.auth.user.isAuthenticated()) {
this.text = null;
$state.transitionTo('home.content', { content: 'overview' });
} else {
$state.transitionTo('authentication');
// app.auth.loginData = app.cache.get('loginData');
this.text = "Please Login ...";
}
}
broadcast = (val) => {
this.$scope.$broadcast('broadcast', val);
};
}
Öz:
- View üzerinden kontrolcü fonksiyonlarına
vm.somethingkullanarak erişirsiniz, örneğinng-click="vm.broadcast('tada')" - Ayrıca servisler için sınıfları kullanın, örneğin
utilityService,UtilityServicesınıfının bir örneğidir ve tip güvenliği elde edersiniz. Daha fazlası: https://www.youtube.com/watch?v=Yis8m3BdnEM&hd=1
Daha fazla sınıfı kontrolör olarak kullan deseni: https://www.youtube.com/watch?v=WdtVn_8K17E&hd=1
Cevap #2
işte nasıl yapıyorum
module protal{
var app =angular.module('portal',[]);
app.controller(controllers)
}
module portal.controllers{
// register any no of controllers here in this namespace
export class masterController{
public fooFunc(){
}
static $inject=['$scope'];
constructor($scope){
$scope.vm=this;
}
}
}
