【问题标题】:Access dynamic html object id from jquery in angular以角度从jquery访问动态html对象ID
【发布时间】:2017-06-27 12:23:59
【问题描述】:

在我的角度页面上,我有三个手风琴。每个都加载一个组件视图,其中包含一个动态生成的表。这意味着,我在整个页面上都有表一、二和三。每个表的上方是一个用于访问该表的 JQuery 部分。实际上,我通过 css 类(例如 table.scrolling-table)查找表来做到这一点。

这适用于第一个表,因为代码只能找到页面上的第一个表(但我有三个不同的表)。 每个表都有一个名为dataTable_{{$ctrl.entry.id}} 的动态ID。 现在我想用 JQuery 调用访问这个 id。 如何在组件内的 JQuery 表中应用动态 id?

Angular 组件视图

<table id="dataTable_{{$ctrl.entry.id}}" class="table scrolling-table">
    <tr>...</tr>
</table>
<script>
    bodyColumnWidth(){
        var $table = $('table.scrolling-table'); // this is actually
        var $table = $('#dataTable_' + entry.id); // i need something like this
    }

    headColumnWidth(){
        var $table = $('table.scrolling-table'); // this is actually
        var $table = $('#dataTable_' + entry.id); // i need something like this
    }

    $(function() {
        bodyColumnWidth();
        headColumnWidth();
    });

    $(window).resize(function() {
        bodyColumnWidth();
        headColumnWidth();
    }).resize();
</script>

【问题讨论】:

  • 与 Angular 应用程序中的所有 dom 相关代码一样,您可以使用指令来访问元素。你到底需要做什么?
  • 我在 window.resize.event 上调整列大小。这与可滚动的数据表有关。如果我使用类似 datatables-node-module 的东西,也会出现同样的问题。所有存在的东西都需要一个我无法在角度代码中添加的 html 对象上的修复 id。这真是一件令人沮丧的事情......
  • 所有应该在指令中完成。听起来应用程序设计有缺陷。建议阅读“Thinking in AngularJS” if I have a jQuery background?

标签: javascript jquery html angularjs


【解决方案1】:

您可以创建一个绑定为属性的 Angular 指令并在该指令中执行 jQuery 代码。

angular.module('myApp').directive('jqStuff', function() {
    return {        
        restrict: 'A',
        link: function (scope, element, attr) {
            // add jQuery stuff here
            // you can get the id of the element like this
            console.log(attr.id);
        }
    }
});

不要忘记将指令绑定到您的表格:

<table id="dataTable_{{$ctrl.entry.id}}" class="table scrolling-table" jq-stuff>
...
</table>

【讨论】:

  • 好的,所以我必须为我的应用程序创建一个指令?
  • 我不能这样做,因为我的代码中还有更多内容。我在页面加载和 window.resize 上进行列调整大小。
  • 我在示例中添加了一些代码来帮助理解我的问题。
  • 控制器的参数是错误的。您正在显示 link 参数
  • 您可以在角度处理窗口调整大小事件。只需在指令中注入 $window 并注册到 resize 事件。你可以找到一个例子here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多