2013-12-09 80 views
0

我有要求使用AngularJS呈现我的数据库中的所有帖子。我需要为每个用户可见的帖子提供编辑功能。目前,我正在通过使用'edit-post'指令来做到这一点。这是链接功能。动态操作AngularJS中的DOM元素

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个按钮)。

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

请指导我这一点。

回答

1

我认为你应该使用Directives

把你的HTML放在javascript里面是不好的,并打破了角度背后的想法,它旨在从视图中分离出逻辑,并保持你的对象的损失耦合。

看到类似的问题在这里:HTML template in AngularJS like KnockoutJS

+0

所以加入一个textarea(使用NG-显示/ NG隐藏)的页面上的每个帖子是罚款?对于100多个帖子,这意味着添加许多textareas和按钮。 –

+0

不,你会建立一个模板,将用于所有的项目。 – developer82

+0

是的。但仍然所有textareas将在编译时加载正确?与绑定的模型值。 –