AngualarJS Directives - Waiting for a directive template to finish rendering?

I'm trying to write a directive that has a template. The template is rendering some DOM elements I want to retrieve. However, when I try to retrieve my DOM elements in the linking function, the DOM elements are not found. If I add a window.setTimeout method before selecting the elements they are found. How can I wait for a template to finish rendering before trying to manipulate the DOM in the linking function?

Here is the directive code for what I'm trying to do:

module.directive('testLocationPicker', function() {

    var linkFn = function(scope, element, attrs) {
        console.log('in linking function');
        window.setTimeout(function() {
            var positions = $('.position');
            console.log('number positions found: ' + positions.length);
            positions.click(function(e) {
                console.log('position clicked');
                scope.$apply(function() {
                     scope.selectedPosition = $(e.currentTarget).html();
                });
            });
        }, 500);
    };

    return {
        link: linkFn,
        restrict: 'E',        
        template: 'Choose a position: <div class="position" ng-repeat="position in positions">{{position}}</div>',        
    }        

});

I have a JS Fiddle of what I'm trying to do: http://jsfiddle.net/bdicasa/XSFpu/42/

I would recommend doing something like this instead:

var module = angular.module('test', []);

module.controller('TestController', function($scope) {
    $scope.positions = [
        'Test Position 1',
        'Test Position 2',
        'Test Position 3'    
    ];

    $scope.selectedPosition = '';

    $scope.handleClick = function (index) {
        $scope.selectedPosition = $scope.positions[index];
    }
});        

module.directive('testLocationPicker', function() {    
    return {
        restrict: 'E',        
        template: 'Choose a position: <div class="position" ng-repeat="position in positions" ng-click="handleClick($index)">{{position}}</div>',        
    }        
});

Instead of trying to search through the dom and add a click event, just modify your template like this:

 template: 'Choose a position: <div class="position" ng-repeat="position in positions" data-ng-click="positionClick($index)">{{position}}</div>',

And then create a positionClick function in the linking function:

var linkFn = function(scope, element, attrs) {
    scope.positionClick = function(index){
     scope.selectedPosition = index;   
    }
};

Working jsFiddle: http://jsfiddle.net/XSFpu/77/

The reason your method is not working is because the ng-repeat hasn't fired after the template has loaded. So it's loaded the directive in, and the link function has been hit, but the ng-repeat actually hasn't started repeating yet. This is why I'm suggesting moving some of your code around to accomdate that.