Ho problemi con i miei controller angolari in AppGyver, poiché il costruttore non viene mai chiamato. Sto usando la sintassi "controller as" da angular, e non so se AppGyver lo supporta, dal momento che tutta la sua documentazione è con "$ scope sintax", per quanto vedo. Questo è il mio controller:AppGyver e controller angolari in Typescript 1.4
interface ILoginControllerScope extends ng.IScope {
vm: LoginController;
}
interface ILoginController {
Login(): any;
}
class LoginController implements ILoginController {
static $inject: any = ['$scope', 'supersonic', 'steroids'];
constructor(private $scope: ILoginControllerScope, private supersonic: any, private steroids: any) {
this.supersonic.logger.log('This should be called');
$scope.vm = this;
}
Login(): any {
}
static controllerId(): string {
return 'loginController';
}
}
appUsers.controller(LoginController.controllerId(), LoginController);
E questo è il mio punto di vista:
<div ng-controller="loginController as vm" class="padding">
<div>
</div>
<div ng-hide="addonsUndefined">
<h1 class="center">Caredfor</h1>
<div class="center">
<img class="logoSize" src="/images/logo.png">
</div>
<div>
<button class="button button-block button-positive icon-left super-social-facebook" ng-click="vm.Login()">Sign in with Facebook</button>
</div>
</div>
</div>
Modifica 1 La JS ha generato:
var LoginController = (function() {
function LoginController($scope, supersonic) {
this.supersonic = supersonic;
supersonic.logger.log('This should be called');
$scope.vm = this;
LoginController.controllerId = function() {
return 'loginController';
};
LoginController.prototype.Login = function() {
};
return LoginController;
})();
appUsers.controller(LoginController.controllerId(), LoginController);
Ho bisogno di ILoginControllerScope perché devo estendere l'interfaccia IScope per aggiungere la nuova proprietà vm (dal momento che Typescript è digitato), questo tipo di codice ha funzionato perfettamente per me nei normali browser. Ho aperto la console del browser per vedere se ho degli errori su AppGyver Connect e ne vedo uno relativo a un ciclo digest infinito $. Grazie per il tuo aiuto –
Ok, fai ciò che ritieni giusto. Ma continuo a non pensare che tu abbia bisogno di ILoginControllerScope. Nel codice HTML, quando si specifica "loginController as vm", questo fornisce già una variabile "vm" che è possibile utilizzare per accedere alle proprietà del controller. Non è necessario memorizzare separatamente un riferimento al controller all'interno di IScope. –
Beh, è solo uno zucchero sintattico, alla fine il JS generato non ce l'ha, e il JS è ciò che sta usando AppGyver. Copio il JS generato sul mio Edit 1 –