2015-04-30 14 views
5

Yapıcı hiçbir zaman çağrılmadığından, AppGyver'daki açısal denetleyicilerimle sorunlarım var. Ben "denetleyici olarak" sözdizimini köşeli olarak kullanıyorum ve AppGyver'ın destekliyor olup olmadığını bilmiyorum, çünkü tüm belgeleri "$ scope sintax" ile gördüğüm kadarıyla. Bu benim denetleyicisi geçerli:Typescript'te AppGyver ve Açısal Denetleyiciler 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); 

Ve bu benim görünümdür:

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

düzenleme 1 JS oluşturulan:

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

cevap

0

Çoğunlukla iyi görünüyor. İşte denemek gereken bazı noktalar şunlardır: tarayıcıda

  1. F12 tuşuna basın ve Konsol sekmesine gidin ve Açısal gelen herhangi bir hata olup olmadığını görmek. Bunun yerine

  2. : Tarayıcınızda

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

    o boşlukta bir kesme noktası koymak ve onu vurmak alırsa bakın:

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

bu deneyin. Eğer varsa, bir kerede, yapıcı parametrelerinizi geri koyun ve hangisinin kırılmasına neden olduğunu görün. ILoginControllerScope parametrenizin sorunlara neden olduğuna dair bir şüphem var çünkü bağımlılık enjeksiyonu bunlardan birini nasıl oluşturacağımı bilmiyor. Bana öyle görünmüyor, ve bunun yerine vanilla ng.IScope ile devam edebilirsiniz. ILoginControllerScope herhangi bir değer eklemiyor. Denetleyiciye bir başvuru kaydetmek için neden ayrı bir sınıfa ihtiyacınız var?

+0

ILoginControllerScope'a ihtiyacım var çünkü IScope arabirimini yeni özellik vm eklemek için genişletmem gerekiyor (çünkü, Typecript yazılmıştır), bu kod tarzı normal tarayıcılarda benim için mükemmel çalıştı. AppGyver Connect'te herhangi bir hata olup olmadığını görmek için tarayıcı konsolunu açtım ve Sonsuz $ digest Loop ile ilgili bir tane görüyorum. Yardımınız için teşekkürler. –

+0

Tamam, doğru hissettiğiniz şeyi yapın. Ama hala ILoginControllerScope'a ihtiyacınız olduğunu düşünmüyorum. HTML'nizde, "loginController as vm" seçeneğini belirttiğinizde, zaten kontrol cihazınızın özelliklerine erişmek için kullanabileceğiniz bir "vm" değişkeni verir. IScope'nuzdaki kontrol cihazınıza bir referansı ayrı olarak kaydetmeniz gerekmez. –

+0

Eh, sadece bir sözdizimsel şeker, sonunda oluşturulan JS yok ve JS AppGyver kullanıyor. Oluşturduğum JS'yi Düzenleme 1'e kopyaladım –

İlgili konular