2014-03-12 66 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'); 
    }); 
});