2016-09-20 22 views
0

以下是我的打字稿角度控制器。我想要一個方法來觸發每次url更改(甚至一小部分url,例如一個數字)。URL更改時調用打字稿方法

我做了我想觸發的方法,我在控制器中有一個構造函數。我如何知道何時觸發該方法,以及我需要在哪裏調用它?在構造函數裏面初始化它?

這是我的控制器代碼:

private returnedClass: Class; 
    static $inject: Array<string> = ['$scope', 'common', 'repository.class']; 
    constructor(public scope: any, public common: app.core.Common, public myService: app.data.IRepositoryClass) {   
    }   
    getFromDB(): void{ 
     if (location.href.indexOf("classAdd") !== -1 && typeof this.common.itemId !== 'undefined' && this.common.itemId != null) 
     { 
      this.myService.getClassById(this.common.itemId).then((returnedItem: Class) => { 
       this.returnedClass = returnedItem; 
       console.log(this.returnedClass); 
      }); 
     } 
    } 
} 
angular 
    .module('app.layout') 
    .controller('HeaderNavigationController', HeaderNavigationController); 

我想提一提,這個控制器執行,當整個HTML DOM被加載(的index.html)1次。我需要觀察者還是什麼?我怎樣才能做到這一點?

在此先感謝

回答

1

如果使用uiRouter監聽$stateChangeSuccess事件:

constructor(private scope: any, private common: app.core.Common, private myService: app.data.IRepositoryClass) {  

    scope.$on('$stateChangeSuccess',() => this.getFromDB()); 
} 

旁註它是爲紀念你的依賴關係爲private,而不是公衆一個很好的做法。

+0

我想你錯過了:「我想要一個方法來觸發每次URL改變時」&「我想提一下,這個控制器是一次執行」部分 – TrulyXax

+0

我更新了我的答案。你在用什麼路由器? – Martin

+0

是的,我使用uiRouter但「scope.on不是函數」錯誤 – TrulyXax