Поэтому, насколько я понимаю, в этой плохой практике есть служба, управляющая DOM. DOM-манипуляция должна быть зарезервирована для директив. Я хотел бы создать нечто похожее на модальный, в котором вызывается служба для создания элемента DOM.
й
function MyController($sope, myModal) {
// Submit a form
$scope.submit = function() {
if (formIsValid) {
// do stuff
} else {
myModal.show({
templateUrl: 'sometemplate.html',
controller: 'MyModalController'
}).then(function() {
// do stuff
});
}
}
}
Пытаясь подумать о разных способах этого, и кажется, что самый простой способ - заставить службу внедрить элемент DOM в page-
function MyModalService($http, $compile, $controller, $rootScope) {
this.show = function (options) {
var $scope = $rootScope.$new(true);
$controller(options.controller, {
$scope: $scope
});
$http.get(options).success(function(html) {
var ele = $compile(html)($scope);
// Bad practice? Alternatives?
angular.element('body').append(ele);
});
}
}
Это может показаться маленьким картофелем, но мне нравится придерживаться шаблона, и мне нравятся причины разрушить шаблон или пересмотреть шаблон. Является ли это общим или есть лучший способ сделать это?
Это звучит очень похоже на то, что угловой бутстрап делает для их модальности.
Вы можете проверить их реализацию здесь: https://github.com/angular-ui/bootstrap/blob/master/src/modal/modal.js (см. Строку 452)