From 66cb2aaec004f70cf7776246637ce76ec88038d7 Mon Sep 17 00:00:00 2001 From: Joe Fiorini Date: Wed, 27 May 2015 15:27:29 -0400 Subject: [PATCH] Watch model param for changes in link-to directive --- .../route-extensions/link-to.directive.js | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/awx/ui/static/js/shared/route-extensions/link-to.directive.js b/awx/ui/static/js/shared/route-extensions/link-to.directive.js index 5528717abd..42d83ede9f 100644 --- a/awx/ui/static/js/shared/route-extensions/link-to.directive.js +++ b/awx/ui/static/js/shared/route-extensions/link-to.directive.js @@ -53,6 +53,11 @@ export default 'transitionTo', function($routeProvider, $location, transitionTo) { + function transitionListener(routeName, model, e) { + e.stopPropagation(); + e.preventDefault(); + transitionTo(routeName, model); + } return { restrict: 'A', scope: { @@ -60,16 +65,25 @@ export default model: '&' }, link: function (scope, element, attrs) { - var model = scope.$eval(scope.model); - scope.url = lookupRouteUrl(scope.routeName, $routeProvider.routes, model, $location.$$html5); - element.find('[data-transition-to]').on('click', function(e) { - e.stopPropagation(); - e.preventDefault(); - transitionTo(scope.routeName, model); - }); + var listener; + + scope.$watch(function() { + var model = scope.$eval(scope.model); + return model; + }, function(newValue) { + + var model = scope.$eval(scope.model); + scope.url = lookupRouteUrl(scope.routeName, $routeProvider.routes, model, $location.$$html5); + element.off('click', listener); + + listener = _.partial(transitionListener, scope.routeName, model); + + element.on('click', listener); + + element.attr('href', scope.url); + }, true); - element.attr('href', scope.url); } }; }