【问题标题】:Angular dynamically add ng-click to many elementsAngular 动态地将 ng-click 添加到许多元素
【发布时间】:2016-10-08 23:22:51
【问题描述】:

我有一个带有许多矩形的 SVG 对象的 Ionic 应用程序(例如<rect class="info" id="1001" width="20" height="20" transform="translate(40,40)" />)。我想为每一个添加一个ng-click 指令,而无需通过手动将ng-click 附加到每个指令。

目前,我在控制器中有以下代码:

$(document).ready(function() {
    $('#svg').on('click', 'rect.info', dispInfo);
}

这可以根据需要工作,但似乎不是“Angular”方式。有更好的方法吗?

我尝试了以下看起来更有棱角的方法,但无济于事:

var elems = $('#svg rect.info');
elems.attr('ng-click', 'dispInfo()');
$compile(elems);

这成功地将 ng-click 指令添加到正确的元素,但它们不会触发。我打电话给$compile 的方式有问题吗?

【问题讨论】:

    标签: javascript jquery angularjs svg


    【解决方案1】:

    为了以更角度的方式,为什么不能用 directive 包裹你的 svg 矩形并添加 ng-click 作为指令模板的一部分?

    我在您的代码中看到的问题是,$compile 函数接受 html 模板。 你可以试试下面的,

    var elems = $('#svg rect.info'),
        $parent = elems.parent();
    
    elems.attr('ng-click', 'dispInfo()');
    elems = $compile(elems.html())($scope); // pass your scope variable instead of $scope
    $parent.empty().append(elems);
    

    【讨论】:

    • 嗯,这似乎和以前一样——没有效果。当我输入 console.log(elems.html()) 时,它是空字符串
    • 我已经更新了我的答案,但我不确定为什么 elems.html() 什么也没返回。如果您可以在 jsFiddle 中重现此内容,请分享以进一步检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2022-01-02
    • 2017-05-06
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多