When shall we use `preLink` of directive's compile function?
angularjs, angularjs-directive
Solution
You need almost never use `preLink`. Viable cases for it are when you need to manipulate data in scope, but not the DOM, before `link` functions (also of other directives) are executed.
As jacob commented, you can always do that from a controller too, but sometimes it's more appropriate to have the code in the directive itself.
There is an excellent article about how directives work where linking order is explained well to: http://www.jvandemo.com/the-nitty-gritty-of-compile-and-link-functions-inside-angularjs-directives/
If you need a good example of why pre-linking is sometimes necessary, I recommend you look at the code of angular directives themselves. For example https://github.com/angular/angular.js/blob/master/src/ng/directive/ngModel.js
Problem
The `compile` function of angularjs' directive has two functions: `preLink` and `postLink`. Pre-linking function Executed before the child elements are linked. Not safe to do DOM transformation since the compiler linking function will fail to locate the correct elements for linking. Post-linking function Executed after the child elements are linked. It is safe to do DOM transformation in the post-linking function. It tells what we should not do in `preLink`, I wonder what and when should I use `preLink`? For most of time I just used `postLink`. Is there any case that we must use it?