Skip to content

Instantly share code, notes, and snippets.

@bripkens
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bripkens/c5bd3ae29ee04451f04c to your computer and use it in GitHub Desktop.
Save bripkens/c5bd3ae29ee04451f04c to your computer and use it in GitHub Desktop.
A quick test how to use the Angular UI router without controllers. Would need to remove resolvers as well, no?
angular.module('scheduler.conferences', ['ui.router', 'expose-to-scope'])
.config(function($stateProvider) {
$stateProvider
.state('conferences', {
url: '/conferences',
directive: 'conferenceList',
resolve: {
conferences: function(ConferenceService) {
return ConferenceService.getConferences();
}
}
});
});
(function(angular) {
'use strict';
angular.module('expose-to-scope', ['ui.router'])
.config(function($stateProvider, $injector) {
$stateProvider.decorator('views', function(state, parent) {
var views = parent(state);
Object.keys(views).forEach(function(viewName) {
var view = views[viewName];
if (view.resolve && !view.controller) {
view.controller = buildExposingController(view.resolve);
if (view.directive) {
var deps = Object.keys(view.resolve);
view.template = createTemplate(view.directive, deps);
}
}
});
return views;
});
});
function buildExposingController(resolve) {
var deps = Object.keys(resolve);
deps.unshift('$scope');
var ctrl = function($scope) {
$scope.resolve = {};
for (var i = 1; i < deps.length; i++) {
var dep = deps[i];
$scope.resolve[dep] = arguments[i];
}
};
ctrl.$inject = deps;
return ctrl;
}
function createTemplate(name, deps) {
var directiveName = toSpinalCase(name);
var template = '<' + directiveName;
template += deps.reduce(function(acc, dep) {
return acc + ' ' + dep + '="resolve.' + dep + '"';
}, '');
return template + '></' + directiveName + '>';
}
function toSpinalCase(camelCaseName) {
return camelCaseName.replace(/[A-Z]/g, function(letter, pos) {
return (pos ? '-' : '') + letter.toLowerCase();
});
}
})(angular);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment