2014-03-12 65 views
2

UPDATE

感謝大家的意見和建議。我認爲這裏給出我的項目需求的最佳方法實際上是使用不同的框架,這將使我能夠更好地控制所有需要添加的自定義動畫。不幸的是,我不認爲我能從Angular獲得我需要的鉤子,我可以在Backbone.Marionette中獲得。另外,我的其他團隊成員以前都使用過木偶,所以我認爲它在各地都更有意義。因爲我的問題並沒有真正解決我的主要問題,所以我需要在頁面上呈現各種元素時,以及在他們離開之前發生複雜的動畫。據我所知,我猜Angular可能會有這種可能,但不是開箱即用的。不幸的是,我不認爲我可以花更多的時間來努力工作。

此外,爲了努力嘗試其他動畫技術,我更新了小提琴以使用addClass和removeClass動畫。但我似乎無法像他預料的那樣讓他們開火。 removeClass動畫運行一致,但不是addClass動畫。在page1和page2之間切換,以觸發指令添加類和removeClass。

http://jsfiddle.net/jgS4W/2/

似乎不可思議我。更新的

-

好了,我已經在這2天了,但沒有成功......我想要做的就是添加自定義JS動畫到當它在ng-view容器中呈現時查看它。

我已經接近幾次了,但每次我都會失敗。

我希望我可以使用$ routeChangeSuccess處理程序來訪問當前視圖的範圍併發出一個'view.enter'事件,但這是行不通的。處理程序中的「當前」參數永遠不能訪問其視圖的範圍。

我創建了一個的jsfiddle解釋什麼,我說什麼: http://jsfiddle.net/jgS4W/

我認爲,以下將工作...

$rootScope.$on('routeChangeSuccess', function (event, current, previous) { current.scope.$emit('view.enter'); ]);

但「current.scope '總是未定義的。

我試圖掛鉤到有關下一代視動畫的事件,但它們都被設置了NG-視圖,而不是被渲染視圖的範圍的範圍...

我在這裏不知所措。如何在呈現視圖時獲取事件?

謝謝!

+0

據我所知,視圖是由相同的事件加載,所以你的時間總是關閉。有人想知道爲什麼你試圖通過事件觸發事件? – Jorg

回答

1

,你沒有得到的範圍,因爲它還不存在的原因。我已更新fiddle來證明這一點。

根據您的需要,您可以採取不同的方法,並使用父控制器和/或共享服務實例來維護一些可用於製作動畫的狀態值。

似乎計算器鏈接到小提琴時強制一行代碼,所以這裏有雲

// this is a single line of code 
+0

感謝您的建議。我認爲這在回答我原來的問題方面最有意義。我已經改變了課程(更新了我的問題),以使用不同的框架,因爲我已經決定了角色支持動畫的廣泛性,我將需要的還不夠。我將這個標記爲正確的答案,因爲我認爲這是對我原來的問題的最佳解決方案,並幫助解釋了爲什麼我的原始小提琴沒有開始工作。 – ThePuzzleMaster

1

你可以嘗試這樣的事情:

$rootScope.$on("$routeChangeSuccess", function(event, next, current) { 
    $rootScope.$broadcast('view.enter') 
}); 

,因爲你是在$ rootScope,你應該廣播事件,而不是發光。

內的控制器你在,你將有可用的view.enter事件:

$scope.$on('view.enter', function() { 
    // Use your event somehow 
}); 
+0

感謝您的想法。我嘗試了這一點,我相信@null指出,因爲當廣播事件時$ scope還不存在,所以這是行不通的。 – ThePuzzleMaster

0

檢查以下的jsfiddle

http://jsfiddle.net/tbbgzfu5/

我提出「routeChangeSuccess '這樣的控制器事件監聽器,你可以看到範圍被發現,因爲它從控制器獲取範圍。

這是否解決了您嘗試解決的問題?

myApp.controller('MyController', function ($scope) { 
    $scope.something = 'some value'; 
    $scope.$on('$routeChangeSuccess', function (event, current, previous) { 
     console.log($scope, 'current.scope'); 
    }); 
});