AppGyver и угловые контроллеры в Typescript 1.4

У меня проблемы с моими угловыми контроллерами в AppGyver, так как конструктор никогда не вызывается. Я использую синтаксис "контроллер как" от angular, и я не знаю, поддерживает ли его AppGyver, поскольку, насколько я понимаю, вся его документация с "синтаксисом $scope". Это мой контроллер:

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);

И это мое мнение:

<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>

Редактировать 1 JS сгенерировал:

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);

1 ответ

Это выглядит в основном хорошо. Вот несколько вещей, которые можно попробовать:

  1. Нажмите F12 в браузере, перейдите на вкладку "Консоль" и посмотрите, есть ли какие-либо ошибки в Angular.

  2. Вместо этого:

    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;
    }
    

попробуй это:

    constructor() {
        var i:number = 7;
    }

В вашем браузере, поставьте точку останова на этой строке и посмотрите, ударит ли она. Если это так, то по одному, поместите параметры вашего конструктора обратно и посмотрите, что вызывает его поломку. У меня есть подозрение, что ваш параметр ILoginControllerScope вызывает проблемы, потому что внедрение зависимостей не знает, как создать один из них. Мне кажется, что вам это на самом деле не нужно, и вместо этого вы можете просто пойти с ванильным нископом. ILoginControllerScope не добавляет никакой ценности. Зачем вам нужен отдельный класс для хранения ссылки на контроллер?

Другие вопросы по тегам