angular-state-view
Version:
Provides nested view management with template support.
71 lines (57 loc) • 1.8 kB
JavaScript
'use strict';
module.exports = ['$state', '$viewManager', '$templateCache', '$compile', '$controller', '$q', function ($state, $viewManager, $templateCache, $compile, $controller, $q) {
return {
restrict: 'EA',
priority: 400,
scope: {
},
link: function(scope, $element, attrs) {
// Create view
var _view = $viewManager.create(attrs.id, {
// Element
$element: $element,
/**
* Render view
*
* @param {String} template A template to use
* @param {Mixed} controller A controller to attach applied to scope.$parent
* @param {Object} locals A data Object to instantiate controller with
* @return {Promise} A promise resolved when rendering is complete
*/
render: function(template, controller, locals) {
var deferred = $q.defer();
$element.html(template);
// Compile
var link = $compile($element.contents());
// Controller
if(controller) {
var _locals = angular.extend({}, locals || {}, {
$scope: scope.$parent
});
$controller(controller, _locals);
}
// Link
link(scope.$parent);
deferred.resolve();
return deferred.promise;
},
/**
* Reset view
*
* @return {Promise} A promise resolved when rendering is complete
*/
reset: function() {
var deferred = $q.defer();
// Empty
$element.empty();
deferred.resolve();
return deferred.promise;
}
});
// Destroy
$element.on('$destroy', function() {
_view.destroy();
});
}
};
}];