5

我在 AppGyver 中的角度控制器存在问题,因为从未调用过构造函数。我正在使用 angular 中的“controller as”语法,我不知道 AppGyver 是否支持它,因为据我所知,他的所有文档都带有“$scope sintax”。这是我的控制器:

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

1 回答 1

0

它看起来大多不错。以下是一些可以尝试的事情:

  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 参数会导致问题,因为依赖注入不知道如何实例化其中之一。在我看来,您并不真正需要它,您可以使用香草 ng.IScope 代替。ILoginControllerScope 没有增加任何价值。为什么需要一个单独的类来存储对控制器的引用?

于 2015-04-30T04:21:06.003 回答