AngularJS – 在触发控制器时获取以前的路线
Angular的内部结构让我感到困惑.
我需要在加载特定视图时确定以前的路由. 这就是我做到的 app.controller('TrashCtrl',function($scope,$rootScope){ $rootScope.$on('$locationChangeSuccess',function(evt,absNewUrl,absOldUrl) { var hashIndex = absOldUrl.indexOf('#'); var oldRoute = absOldUrl.substr(hashIndex + 2); console.log(oldRoute); }); }); 不幸的是,在逻辑开始工作之前,我必须调用与该控制器对应的视图.控制器第一次触发时,不记录任何内容.此外,在此初始加载后,应用程序将记录每个routeChange,即使加载的视图不能与TrashCtrl一起使用 我希望这样: >当加载视图Trash(其控制器为TrashCtrl)时,我需要先前的路由或空字符串(如果这是第一个). 如何实现这一目标? 编辑: 请注意,我知道可以创建自定义服务并将每个更改写入其中.这不是我想要的.我想仅在需要时才对数据进行处理,例如在调用Trash时. 解决方法
我尽我所能,但似乎没有直接的方法来访问
$routeProvider 的resolve属性中的前一个路径的路径.
为了好玩,我使用以下属性实现了一个(荒谬复杂的)解决方案: >仅当加载/ trash视图时(不是针对每个路径),它才会检测上一个路径. 用语言说 以下是“简单”字样的工作原理: 在resolve对象中,它为下一个$routeChangeSuccess事件注册一个侦听器. 简单就像馅饼! 注意: 代码 控制器: app.controller('trashCtrl',function ($scope,prevRoutePromiseGetter) { prevRoutePromiseGetter().then(function (prevRoute) { $scope.prevRoute = prevRoute || 'nowhere'; }); }); 解决对象: resolve: { prevRoutePromiseGetter: function ($q,$rootScope) { var deferred = $q.defer(); var dereg = $rootScope.$on('$routeChangeSuccess',next,prev) { dereg(); deferred.resolve((prev.originalPath || '').substr(1)); } ); return function () { return deferred.promise; }; } } 另见,这是short demo. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |