2015-11-04 35 views
1

我正在用TypeScript和AngularJS 1創建一個應用程序,並且遇到了創建常量並將常量傳遞給其他類的問題。我有以下常數我的應用程序:Typescript:AngularJS 1常量問題

module app{ 
     export class AUTH_EVENTS { 
      static get Default():any { 
        return { 
        LOGIN_SUCCESS: 'AUTH_EVENTS:LOGIN_SUCCESS', 
        LOGIN_FAILED: 'AUTH_EVENTS:LOGIN_FAILED', 
        LOGOUT_SUCCESS: 'AUTH_EVENTS:LOGOUT_SUCCESS', 
        LOGOUT_FAILED: 'AUTH_EVENTS:LOGOUT_FAILED', 
        SESSION_TIMEOUT: 'AUTH_EVENTS:SESSION_TIMEOUT', 
        NOT_AUTHORIZED: 'AUTH_EVENTS:NOT_AUTHORIZED' 
       }; 
      } 
     } 
var app = getModule(); 
app.constant("AUTH_EVENTS", AUTH_EVENTS.Default()) 
} 

這我嘗試訪問這裏:

module app{ 
    class auth{ 

     constructor(public $q: ng.IQService, 
      public $state:angular.ui.IState, 
      public AUTH_EVENTS: AUTH_EVENTS){ 
     } 

      responseError(response:any) { 
       if (response.status === 401) { 
        console.log(this.AUTH_EVENTS.LOGIN_SUCCESS); 
       } 
       return this.$q.reject(response); 
     } 


    } 
} 

,我有這個問題,就是在

console.log(this.AUTH_EVENTS.LOGIN_SUCCESS) 

的LOGIN_SUCCESS不定義。

你有什麼想法,爲什麼會發生這種情況?定義常量是否存在問題,還是類auth問題?更具體地講,這是當我編譯TS到JS我得到的錯誤:

error TS2339: Property 'LOGIN_SUCCESS' does not exist on type 'AUTH_EVENTS'. 

回答

1

這個怎麼樣definiton:

module app{ 
    export class AUTH_EVENTS {  
     LOGIN_SUCCESS= 'AUTH_EVENTS:LOGIN_SUCCESS'; 
     LOGIN_FAILED= 'AUTH_EVENTS:LOGIN_FAILED'; 
     LOGOUT_SUCCESS= 'AUTH_EVENTS:LOGOUT_SUCCESS'; 
     LOGOUT_FAILED= 'AUTH_EVENTS:LOGOUT_FAILED'; 
     SESSION_TIMEOUT= 'AUTH_EVENTS:SESSION_TIMEOUT'; 
     NOT_AUTHORIZED= 'AUTH_EVENTS:NOT_AUTHORIZED'; 
     static Default() { return new AUTH_EVENTS(); } 
    } 
    var app = getModule(); 
    app.constant("AUTH_EVENTS", AUTH_EVENTS.Default()) 
} 
+0

它運作良好。我設法通過刪除靜態Default來修復,並將導出類AUTH_EVENTS中的所有變量設置爲public。你能告訴我是否有任何設置靜態默認設置變量公開的好處嗎? – uksz

+0

我會說,這取決於你的喜好。我更喜歡類的公共成員,因爲它很容易用作類型(那個類)....同樣,public是默認訪問修飾符,如果它的值被忽略... –

+1

謝謝!我也這麼想 :) – uksz