Skip to content

Instantly share code, notes, and snippets.

@luxiaojian
Created January 26, 2016 08:34
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 luxiaojian/024d1da897f7a97490fb to your computer and use it in GitHub Desktop.
Save luxiaojian/024d1da897f7a97490fb to your computer and use it in GitHub Desktop.
angular-dialog-service
class Dialog {
constructor(services) {
this.services = services;
}
init({controller, controllerAs, scope}) {
var { $controller } = this.services;
var ctrl = $controller(controller, { scope });
var dialog = {
controller: ctrl,
scope,
element: this.element,
hide: this.hide.bind(this)
};
ctrl.$dialog = dialog;
if (controllerAs) scope[controllerAs] = ctrl;
return dialog;
}
show({ parentElement, template, templateUrl, controller, controllerAs }) {
var { $compile, $rootScope } = this.services;
var scope = $rootScope.$new();
return this.fetchTemplate({ template, templateUrl })
.then(raw => {
var linkFn = $compile(raw);
var element = linkFn(scope);
if (parentElement) {
this.parentElement = parentElement;
parentElement.appendChild(element[0]);
} else {
document.body.appendChild(element[0]);
}
this.element = element;
})
.then(() => this.init({ controller, controllerAs, scope }));
}
hide() {
if (this.parentElement) {
this.parentElement.removeChild(this.element[0]);
} else {
document.body.removeChild(this.element[0]);
}
}
fetchTemplate({template, templateUrl}) {
var { $q, $templateRequest } = this.services;
var deferred = $q.defer();
if (template) {
deferred.resolve(template);
} else if (templateUrl) {
$templateRequest(templateUrl).then(deferred.resolve);
} else {
deferred.reject('No specify template or templateUrl');
}
return deferred.promise;
}
}
export default Dialog;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment