Я использовал директиву для использования диалогов jqueryUI.Директива, ссылающаяся на свой собственный идентификатор
app.directive('popUp', function() {
return {
restrict: 'E',
scope: {
myId: '@',
onCancel: '&'
},
template:
'<div id="{{myId}}">
<button ng-click="onCancel()">...</button>
...
</div>'
link: function(scope, element, attrs) {
scope.closeDialog = function() {
$("#" + id).dialog('close');
}
// question 1: how to reference id of this directive (self)?
// question 2: should it be here, in compile, or in directive controller?
// question 3: 'ng-click=closeDialog()' missing when popup element inspected in firebug/dev tool
// question 4: is there a way to avoid jquery like selector $("#" + id) to reference this element?
}
};
});
И это HTML:
<pop-up my-id="success" on-cancel="closeDialog()"> ... </pop-up>
Если я объявляю внешний контроллер и closeDialog
функцию, прикрепленную к его $scope
, это работает отлично, как это:
app.controller('DialogCtrl', function($scope) {
$scope.closeDialog = function(id) {
$("#" + id).dialog('close');
};
});
HTML
<div ng-controller="DialogCtrl">
<pop-up my-id="success" on-cancel="closeDialog('success')"> ... </pop-up>
</div>
Но я хочу избежать избыточности id. Поэтому я хочу, чтобы директива имела свою собственную функцию закрытия. Если у вас также есть ответы на другие вопросы выше, это очень ценится. Благодарю.
Будет ли 'element.dialog()' вызывать всплывающее окно? – menorah84
, это просто вызов простейшего jQueryUI диалогового API. Замените его тем, что вам нужно. – user2943490
Как вызвать 'element.dialog()' вне этой директивы? Как во внешнем контроллере? – menorah84