If the directive is only put into the DOM once, the link function is only called once. Unless the fragment you provided is inside an ng-repeat or something, it is correct that the link function only gets called the one time. Maybe if you could make a plunk <http://plnkr.co/> that encapsulates your expected and observed behaviors?
Eric On Wed Dec 03 2014 at 8:23:20 PM siegeld <[email protected]> wrote: > Sorry, here is the use of the directive: > > <area:scene-button-bar integration-id="currentArea.integrationId" > max-scenes="5"></area:scene-button-bar> > > David > > On Wednesday, December 3, 2014 5:38:41 PM UTC-5, Frédéric Fanchamps wrote: >> >> Heu... in the code/html you have shared, you only create the directive >> areaSceneButtonBar but you don't show the usage. >> Missing something in your post? >> >> On Wednesday, December 3, 2014 9:59:00 PM UTC+1, siegeld wrote: >>> >>> I've created a directive that for some reason the link function only >>> gets called once per app lifecycle, and that the scope in the directive >>> appears shared when I route to different pages. Please see the directive >>> code below: >>> >>> lutronDirectives.directive('areaSceneButtonBar', >>> ['LutronServerService', function(LutronServerService) { >>> var linker = function(scope, element, attributes) { >>> scope.scenes = []; >>> scope.model = 0; >>> for (var i = 0; i < parseInt(scope.maxScenes); i++) { >>> scope.scenes.push({name: "Scene " + i, number: >>> i.toString()}); >>> } >>> var area = LutronServerService.getLutronArea(scope. >>> integrationId); >>> if (area != null) >>> scope.scenes = LutronServerService.getLutronArea(scope. >>> integrationId).scenes; >>> else >>> scope.scenes = []; >>> scope.click = function(scene) { >>> LutronServerService.setAreaScene(scope.integrationId, >>> scene); >>> scope.model = scene; >>> } >>> scope.$on('AreaEvent', function(event, obj) { >>> if (obj.integrationId == scope.integrationId && >>> obj.actionNumber == "6") { >>> scope.deviceLevel = parseInt(obj.parameter) >>> scope.model = obj.parameter; >>> scope.$apply(); >>> } >>> }); >>> LutronServerService.queryAreaScene(scope.integrationId); >>> } >>> return { >>> restrict: 'E', >>> scope: { >>> integrationId: '=', >>> maxScenes: '=', >>> }, >>> templateUrl: 'partials/areaSceneButtonBar.html', >>> link: linker >>> } >>> }]); >>> >>> Please also see the templateUrl here: >>> >>> <div class="btn-group"> >>> <label ng-repeat="scene in scenes" class="btn btn-primary" >>> ng-model="model" btn-radio="scene.number" >>> ng-click="click(scene.number)"> >>> {{scene.name}} >>> </label> >>> </div> >>> >>> You will notice that the template create a number of bootstrap radio >>> buttons. >>> >>> So - what am I doing wrong? Why doesn't the link function get run each >>> time I create a new directive? >>> >>> Very puzzled... >>> >>> Thanks, >>> >>> David >>> >> -- > You received this message because you are subscribed to the Google Groups > "AngularJS" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/angular. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "AngularJS" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/angular. For more options, visit https://groups.google.com/d/optout.
