[AngularJS] Angular 1.3 Anuglar hint
Read More: http://www.linkplugapp.com/a/953215
https://docs.google.com/document/d/1XXMvReO8-Awi1EZXAXS4PzDzdNvV6pGcuaF4Q9821Es/pub
angular-hint
helps us writing better Angular code and makes finding very common mistakes in our code base easier. For example, did it ever happen to you, that you developed your Angular app, you grabbed a module from somewhere, then you started using the directives that the module comes with, and no matter how much you followed the usage instructions, it simply didn’t work. And after one hour of debugging you found out that you forgot to add the module dependency to your application. Yikes!
These modules are:
- angular-hint-controllers - Warns about use of global controllers and hints about best practices for controller naming
- angular-hint-directives - Hints about misspelled attributes and tags, directives and more
- angular-hint-dom - Warns about use of DOM APIs in controllers
- angular-hint-events - Identifies undefined variables in event expressions
- angular-hint-interpolation - Notifies of undefined parts of interpolations chains and suggests available variables
- angular-hint-modules - Identifies missing module namespaces, undeclared modules, multiple uses of
ng-app
and more
Install and using angular-hint
npm install angular-hint
Once it’s installed, we can embed the source in our application right after Angular itself like this:
<script type="path/to/angular/angular.js"></script> <script type="path/to/angular-hint/hint.js"></script>
Next, we apply the ng-hint
directive in order to actually use the angular-hint
module:
<body ng-app="myApp" ng-hint> </body>
By default, ng-hint
injects all the mentioned hint modules.
However, if we don’t want to get controller related hints, but are interested in DOM related hints, we can restrict the use of hint modules by using the ng-hint-include
directive instead.
The following code only injects angular-hint-dom
:
<body ng-app="myApp" ng-hint-include="dom"> </body>
We can even define more than just one hint module if needed:
<body ng-app="myApp" ng-hint-include="dom directives"> </body>
Module hints
If you declared an module:
angular.module('myAppDependency', []);
but forgot to include into your main app:
angular.module('myApp', []);
Now, instead of fiddling around for an hour to find out why myAppDependency
’s directives aren’t picked up, angular-hint
is telling us that we might missed something. Simply open your browsers console and you should see something like this:
Angular Hint: Modules Module "myAppDependency" was created but never loaded.
Controller hints
One of these best practices is, when naming controllers, to suffix them with Controller
instead of using short names like Ctrl
. angular-hint
helps with that too. Let’s take a look what happens when we define a controller with a name that doesn’t have this suffix:
angular.module('myApp', []).controller('AppCtrl', function () { });
Having a controller registered like this, angular-hint
gives us the following warning:
Angular Hint: Controllers The best practice is to name controllers ending with 'Controller'. Check the name of 'AppCtrl'
Directive hints
Example where error might happens:
<ul> <li ng-repaet="i in [1,2,3,4]"> <!-- more dom goes here --> </li> </ul>
However, when angular-hint
is activated, we get the following very useful warning:
Angular Hint: Directives
There was an AngularJS error in LI element.
Found incorrect attribute "ng-repaet" try "ng-repeat"