在AngularJS中动态操作DOM元素

时间:2013-12-09 08:01:27

标签: angularjs angularjs-directive

我需要使用AngularJS从我的数据库中呈现所有帖子。我需要为用户可见的每个帖子提供编辑功能。目前,我通过使用'编辑帖子'指示。这是链接功能。

link: function ($scope, element, attrs) {
            element.bind('click', function () {
                var divId = $scope.$parent.post.meta.id + "Data";

                var html = $compile("<div class='editTextAreaDiv' id='" + divId + "'>" +
                            "<textarea  class='editTextArea' id='editBox' rows='3' ng-model='editedPostText' name='editedPostText'>" + $scope.$parent.post.meta.data + "</textarea><br />" +

                            "<span class='pull-right'>" +
                                "<input class='btn' type='button' value='Save'  ng-click='saveEditedPost(\"" + divId + "\")'/>" +
                                "<input class='btn' type='button' value='Cancel' ng-click='cancelEdit(\"" + divId + "\")'/>" +
                            "</span>" +
                        "</div>")($scope);
                $("#" + divId).html(html);
            });

}

我通过动态添加textarea和2个按钮来操作DOM。

我的问题是这种动态操作DOM元素的方法在Angular世界中是否更可取。或者我应该采取其他方法(例如使用ng-show / ng-hide指令来显示/隐藏textarea和2个按钮)。

注意:我不想使用ng-show / ng-hide,因为我不想为每个帖子引入额外的textarea和2个按钮。

请指导我。

1 个答案:

答案 0 :(得分:1)

我认为你应该使用Directives

将你的HTML置于javascript中是不好的,并打破了角度背后的想法,旨在将逻辑与视图分开,并保持你的对象丢失耦合。

在此处查看类似问题:HTML template in AngularJS like KnockoutJS