在自定义指令模板中使用 ng-if 导致无法将调整大小事件绑定到元素

Using ng-if in a custom directive template causing trouble to bind resizing event to element

我将我的 Pop-UP(即 bootstrap 弹出)指令多次放在一个页面上。仅当 ng-if 为真时弹出窗口出现,作为属性参数发送,但 jQuery 调整大小函数未绑定到 link 中的元素指令的功能。

这是我指令中 HTML 的第一行

<div  class='ng-modal' id='Modal1' ng-if='show'>

点击按钮时show为真,弹窗出现在UI但是

$('#ModalDialog').resizable()

没有被开火。 虽然如果我这样做

$timeout(function () {$('#Modal1').resizable() }, 1000);

然后它工作正常,但我的代码中不允许使用 $timeout 函数。 执行此操作的正确技术是什么?

我的发现:只有当指令被多次放置在一个页面上时才会出现问题,使用 ng-show 的单次调用不会造成任何问题。

由于 JQuery 依赖于现有的 DOM 元素,在

的执行期间
$('#ModalDialog').resizable()

带有“#ModalDialog”的元素可能存在也可能不存在。 我不熟悉 JQuery 可调整大小,但是当您需要在 angular 中的元素上应用 JQuery 时,最佳做法是创建 指令 并使用link 函数中的 DOM。这将确保非 angular 行为正确应用于元素。

.directive('uiResizable', function() {
return {
    restrict: 'A',
    scope: ...,
    templateUrl: ...,
    link: function(scope, element, attrs) {
        element.resizable();
    }
  };
});

并将 JQuery 可调整大小应用于元素:

<div id="#ModalDialog" ui-resizable ng-if ...>

希望对您有所帮助。