2015-01-05 34 views
0

我使用的角度router`跟蹤我的web應用的這樣的狀態AngularJS路由器調用函數當某些URL加載最初

app.service('stateService', function() { 
    this.someSwitch = false; 
    this.someLongDataArray = [x, y, z]; 
}); 

目前,在將路徑從AController更改爲\subpage\:id url之前,我將爲服務的成員分配新值,以便它們可以在子頁面中引用。

現在的問題是,如果用戶直接啓動子頁面的URL \subpage\:id,或打在子頁面的瀏覽器的刷新按鈕,BController將被調用,我會失去,這是爲了準備在服務中的值由AController。

我想知道我應該在這種情況下做什麼。有什麼方法可以在用戶直接啓動子頁面時調用,所以我有機會準備數據? (也許我可以觀看html onload事件,但不知道這是最好的答案)。

謝謝

回答

1

看來,BController依賴於AController。理想情況下,Controller不應該包含任何數據/ dom操作,狀態維護。它只是視圖和$ scope模型之間的粘合劑。據說,你不需要在控制器之間創建任何這種依賴關係。該服務可以從兩個控制器中調用。

OR 如果確實存在這樣APanel.html必須加載/初始化加載BPanel.html之前,則必須檢查在BContoller一些標誌和重定向用戶APanel.html的要求。 像

if(<check some flag>){ 
$location.path('/'); 
} 

但你必須找到重新將用戶重定向到BPanel.html的方式。我想這不是一個推薦的方法。

0

我不知道我完全明白你的問題。但是如果有可能用戶可能直接點擊BPanel.html那麼你應該這樣做。

if(serviceExists()){ 
    //Do your usual Bcontroller stuff here if the services was initialized 
} 
else{ 
    //Show a warning/error like "Oops, something is wrong go back to '/'" OR 
    // Initialize services in BController 

} 

如果在BController非常重要之前初始化您的服務,這應該在您的BController中。你基本上強迫人們留在AController上。

+0

謝謝,但我不知道這個代碼應該放在哪裏?這個代碼應該放在BController的'$ scope.someFunction(){...}'中嗎?或者在控制器加載時會被調用的其他地方? –

+0

只要加載路由,就應該調用Bcontroller。因此,在您的BController代碼中,您應該先檢查一下。 –