2013-06-01 46 views
0

我有模板(即不通過路由器定義),在那裏我有2個鏈接(錨),它的變化而變化如何獲得頁面的全球範圍內,當路由變化

<a ng-href="#/service/service1" 
    ng-click="activeService='minecraft'"> 

然後我有2個圖像 - 他們的類依賴於通過設置變量NG單擊

ng-class="activeService != 'none' ? { true: 'service-maximize-animate', false: 'service-minimize-animate'}[activeService=='service1'] : ''" 

這完美的作品。但是,當我按在瀏覽器中直接或改變URL地址,路由變化,ng-view更新,但圖像(全球模板不是由路由器設置)不更新後退按鈕(他們是不是在ng-view (模板))

在這裏,我所面臨的問題 - 我必須使用controller,但我無法通過路由器使用controller,因爲它的範圍只爲模板(ng-view)。

我也嘗試過使用ng-controller,但是它在路由改變時不會被調用。

有什麼辦法解決嗎? 另外,我想知道是否有什麼辦法可以讓ng-view更好的可讀性,現在它的可怕:)

感謝, 米哈爾Hojgr

編輯:的jsfiddle:http://jsfiddle.net/5rzGU/9/

+0

如果用戶在瀏覽器中而不是在您的應用中點擊後退按鈕,它是否也必須工作? – Sharondio

+0

是的,這就是我說的 - 這是唯一的問題 –

回答

0

我使用Angular的Observer系統解決了這個問題。在控制器,這是路線後,叫了變化,它廣播的事件

$rootScope.$broadcast('event'); 

,並在控制器中,有不同的$範圍比路由器之一,它監聽event

$scope.$on('event', function() { 
     //code 
}); 

希望它可以幫助任何人:)

0

一個的jsfiddle /搶劫者在這裏會非常有幫助。

據我所知,這兩個控制器是獨立的。當你回頭或轉發的URL只有ng-view的變化,因爲只有ng-view處理路由器。 other controller不知道ng-view's controller正在發生什麼。要麼你需要發送一條消息從ng-view controllerother controller,這裏討論:AngularJS: How can I pass variables between controllers?

或者你可以考慮將第二個控制器轉換爲指令。

至於提高ng-view的可讀性。考慮將其拆分成更小的模塊 - 儘可能使用指令。

+0

我剛剛添加jsfiddle:http://jsfiddle.net/5rzGU/9/ –

+0

你jsfiddle不起作用。沒有'ng-view'或'ng-app =「myApp」'。好像你正在試圖添加一個導航欄到你的視圖。爲什麼不在'ng-view'內部做到這一點?如果你需要訪問'serviceId',你可以通過'$ routeParams'獲得:[http://docs.angularjs.org/api/ng.$ro​​uteParams](http://docs.angularjs.org/api/ NG。$ routeParams)。然後基於'$ routeParams'的值,你可以設置'activeService'類。 – winkerVSbecks

+0

JS小提琴的工作原理 - 當您點擊鏈接時,它會更改並打印變量。什麼不工作是後退按鈕 - 我想以某種方式解決:)我會嘗試用ng-view :)做些什麼:) –