2016-09-20 12 views
0

以下は私のタイプスクリプト角度コントローラーです。私は、urlが変わったたびに(たとえURLの小さな部分であっても、例えば数字など)毎回トリガするメソッドが必要です。urlが変更されたときに、typescriptメソッドを呼び出す

私はトリガーしたいものを作成しました。コントローラーにはコンストラクターがあります。どのようにしてそのメソッドをトリガーするのか、どこで呼び出す必要があるのか​​を私はどのように知ることができますか?それを初期化するコンストラクタの内部?

これは私のコントローラのコードです:

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がロードされる1時間に実行、(index.htmlに)であることを言及したいと思います。ウォッチャーなどが必要ですか?どうやってやるの?事前

答えて

1

おかげで、あなたはuiRouterを使用している場合$stateChangeSuccessイベントをリッスン:

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

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

側注privateではなく、publicとしてあなたの依存関係をマークすることをお勧めします。

+0

私はあなたが逃したと思います:「URLが変更されたときに毎回トリガする方法が必要です」&「このコントローラが1回実行されたことを言いたい」 – TrulyXax

+0

私の回答が更新されました。どのルータを使用していますか? – Martin

+0

はい、私はuiRouterを使用していますが、 "scope.onは関数ではありません"エラー – TrulyXax

関連する問題