AngularJS
Slugify filter
To make strings hyphen separated and url friendly
app.filter('slugify', function () {
return function (input) {
if (!input)
return;
// make lower case and trim
var slug = input.toLowerCase().trim();
// replace invalid chars with spaces
slug = slug.replace(/[^a-z0-9\s-]/g, '');
// replace multiple spaces or hyphens with a single hyphen
slug = slug.replace(/[\s-]+/g, '-');
return slug;
};
});
Equal height directive to set child elements to the same height
app.directive('equalHeight', function ($timeout) {
return {
link: function (scope, element, attr) {
// wrap in $timeout to wait for element to render
$timeout(function () {
// find tallest child element
var tallest = 0;
element.children().each(function (index, child) {
if ($(child).height() > tallest) {
tallest = $(child).height();
}
});
// set all children to height of tallest child
element.children().height(tallest);
});
}
}
});
Autofocus directive to focus on an element after if has been rendered
app.directive('autoFocus', function () {
return {
link: {
post: function (scope, element, attr) {
// runs after the element been rendered
element.focus();
}
}
};
});
NodeJS / ExpressJS Routes to prevent 404 error after page refresh in html5mode
var express = require('express');
var path = require('path');
var router = express.Router();
// serve angular front end files from root path
router.use('/', express.static('app', { redirect: false }));
// rewrite virtual urls to angular app to enable refreshing of internal pages
router.get('*', function (req, res, next) {
res.sendFile(path.resolve('app/index.html'));
});
module.exports = router;
IIS URL Rewrite Rule to prevent 404 error after page refresh in html5mode
For angular running under IIS on Windows
<rewrite>
<rules>
<rule name="AngularJS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
Clear querystring with $location service
use $location.url([path]) instead of $location.path([path])
Filter array to exclude objects based on property value
var users = $filter('filter')(users, { Role: '!' + Role.Admin });
ngRepeat with break tag (<br />) separator/delimiter
<span ng-repeat="item in items">
<a href="#/item.Id">{{item.Name}}</a>
<br ng-if="!$last" />
</span>
Add a custom HTTP Header to all requests
$http.defaults.headers.common['My-Custom-Header'] = 'someValue';
Auto-logout if any unauthorised web api request is made
app.config(['$provide', '$httpProvider', function ($provide, $httpProvider) {
$provide.factory('unauthorisedInterceptor', ['$q', function ($q) {
return {
'responseError': function (rejection) {
if (rejection.status === 401) {
window.location.href = '/#/login';
}
return $q.reject(rejection);
}
};
}]);
$httpProvider.interceptors.push('unauthorisedInterceptor');
}])