【问题标题】:Change element class in angularjs directive link function更改angularjs指令链接函数中的元素类
【发布时间】:2015-03-28 00:40:57
【问题描述】:

我正在尝试使用 Angularjs 中的自定义指令设置一个简单的拖放界面。我正在使用从这个站点和其他站点收集的一些样本,这一切看起来都相当简单,但并不完全有效。具体来说,我正在尝试实现一个“dragenter”处理程序,当拖动的元素经过它时,它将改变放置目标的外观。首先,我将展示我正在使用的 HTML:

    <div cstyle="width: 900px; height: 600px; border: 1px solid #999">
        <div id="draggable" ses-draggable style="width: 200px; height: 150px; background-color: #777">Drag Me!</div>
        <div id="dropTarg1" ses-drop-target style="width: 100px; height: 100px; border: 1px solid #888; background-color: #aaa">Drop target 1</div>
        <div id="dropTarg2" ses-drop-target style="width: 100px; height: 100px; border: 1px solid #888; background-color: #aaa">Drop target 2</div>
        <div id="dropTarg3" ses-drop-target style="width: 100px; height: 100px; border: 1px solid #888; background-color: #aaa">Drop target 3</div>
    </div>

这是两个指令的代码:

ems2App.directive('sesDraggable', function () {
    return {
        restrict: 'A',
        link: function (scope, elem, attrs) {
            angular.element(elem).attr("draggable", "true");
        }
    };
});

ems2App.directive('sesDropTarget', function () {
    return {
        restrict: 'A',
        link: function (scope, elem, attrs) {
            elem.bind('dragenter', function (e) {
                angular.element(e.target).addClass('divDragOver');
            });
            elem.bind('dragleave', function (e) {
                angular.element(e.target).removeClass('divDragOver');
            });
        }
    };
});

这里是 divDragOver 类:

.divDragOver {
    border: 3px solid black;
    background-color: green;
}

只要当拖动的元素在放置目标之一上时正确调用该函数,这一切都可以正常工作,但是类更改未显示在浏览器上。浏览器控制台中没有显示任何内容,因此不会引发错误,只是不会改变放置目标元素的外观。

【问题讨论】:

    标签: javascript angularjs drag-and-drop


    【解决方案1】:

    如果您使用的 HTML 与您的帖子中的完全相同,那么您看不到样式更改的原因仅仅是由于 CSS。 标记中的元素是用一些内联样式定义的,这些样式将优先于类中定义的任何样式(没有!important)。所以你的类可能应用正确,但显示的边框和背景仍然是优先级较高的,即内联定义的。

    如果您删除内联样式并改用 CSS 类,只要 divDragOver 类优先于您定义的新类,它就会按预期工作。为此,在定义 divDragOver 之前定义新类就足够了。

    【讨论】:

    • 天哪……我有没有觉得自己很愚蠢。非常感谢您不说“非常愚蠢的问题”之类的话。我应该得到它。我真的很了解 CSS 优先级的规则。以为我只见树木不见森林。其中最有趣的部分是我盯着这个至少一个小时,然后才求助于发布问题。感谢您非常有礼貌的回答!
    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 2014-03-11
    • 2014-07-05
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    相关资源
    最近更新 更多