javascript - 单击 AngularJS 指令内的嵌入元素时调用函数

标签 javascript angularjs

我编写了一个模态指令,因为我想在页面上有几个模态。我使用本教程来实现此目的:http://adamalbrecht.com/2013/12/12/creating-a-simple-modal-dialog-directive-in-angular-js/

首先,这是我的指令代码,它与上一教程中的代码非常相似:

//here, app is an AngularJS module
app.directive('modal', function() {
    return {
        restrict: 'E',
        scope: {
            show: '='
        },
        replace: true,
        transclude: true,
        link: function(scope) {
            scope.hide = function() {
                scope.show = false;
                document.body.classList.remove('wwf-noScroll');
            };
        },
        template: '<div class="Modal" ng-show="show"><div class="Modal-overlay" ng-click="hide()"></div><button class="Modal-close" ng-click="hide()"></button><div class="Modal-content" ng-transclude></div></div>'
    };
});

然后这是我如何使用它:

<modal show="showInformationsModal">
    <h2 class="Modal-title">Informations</h2>
    <button type="button">Close this</button>
</modal>

我想要实现的是能够关闭模式(即调用指令范围内定义的 hide 函数)。但我无法将按钮放在指令的模板中,因为有时我想要模式中的按钮来关闭它,但有时则不然,并且该按钮内的文本永远不会相同。

我尝试了一些事情,例如:

  • <button type="button" ng-click="hide()">Close this</button>
  • <button type="button" ng-click="showInformationsModal = false">Close this</button>
  • <button type="button" ng-click="show = false">Close this</button>

没有任何作用。我想我错过了一些东西!有人可以帮助我吗?

谢谢,

西里尔

最佳答案

编辑

正如this comment中指出的那样,通过将 var contentElement = element[0].querySelector('.Modal-content'); 替换为 var contentElement = element,transclude 函数可以更加通用[0].querySelector('[ng-transclude]');

原版

一位 friend 给我发了这个链接:http://angular-tips.com/blog/2014/03/transclusion-and-scopes/

我所缺少的正是这个链​​接所指出的:嵌入的 HTML 范围不是指令的独立范围。

我使用了link函数的第五个参数:

transclude(scope, function(clone, scope) {
  var contentElement = element[0].querySelector('.Modal-content');
  contentElement.innerHTML = '';

  for (var i = 0; i < clone.length; ++i) {
    contentElement.appendChild(clone[i]);
  }
});

这是更新的代码笔。我不知道这是否是解决我的问题的最美丽的方法,但它解决了它! http://codepen.io/JesmoDrazik/pen/NqZLYR?editors=001

关于javascript - 单击 AngularJS 指令内的嵌入元素时调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32143161/

相关文章:

javascript - Angular Material 和仪表板

javascript - 获取jquery datatable的当前行点击数据

javascript slice 在相同的结构化数组上执行不同的操作

javascript - 在 JavaScript 附加中调用带有参数的函数

javascript - 自动将多个变量定义重构为单个声明

javascript - Angularjs - 禁用和取消选中复选框

javascript - Ace 编辑器 - 如何在同一弹出窗口中包含帮助文本和片段

javascript - Angular .js :13294 Error: [$injector:unpr] Unknown provider: cityResourceProvider <- cityResource <- cityListCtrl

php - 使用 Laravel 和 AngularJS 从数据库获取用户特定信息

javascript - Angular : How to access parameters outside of $timeout callback?