我使用Angular指令动态添加元素:
.directive('myNote', function () {
return {
restrict:'E',
scope:{
delete: '&',
note:'='
},
controller: function()
{
this.delete = function(){
$('my-note').remove();
};
},
controllerAs: 'noteCtrl',
link:function (scope, element, attrs) {
var $el = $(element);
$el.draggable();
},
template: '<div class="note yellow" id={{note.id}}>' +
'<img ng-src="close.png" align="right" ng-click="noteCtrl.delete()">' +
'<br>'+
'<blockquote>'+
'<cite class="title">{{note.title}}</cite> <br><br> {{note.content}}' +
'</blockquote>' +
'</div>'
};
})
这样,每次添加my-note时,div都会被添加为div id = 1,div id = 2等等。当我点击div的img标签时,我想删除一个特定的音符。我怎样才能做到这一点?
P.S:$(&#39; my-note&#39;)。remove();删除所有笔记。我只想删除我点击的笔记。
以下是请求的HTML:
<ul>
<li ng-repeat="note in notes">
<my-note note="note" delete="deleteNote(note)"></my-note>
</li>
</ul>
答案 0 :(得分:2)
不要使用内联onclick=
处理程序。使用委托事件处理程序(附加到不变的祖先元素)执行“jQuery方式”:
首先,在图像按钮中添加一个类(并删除onclick
处理程序):
'<div class="note yellow" id={{note.id}}>' +
'<img ng-src="close.png" align="right" class="deleteme">' +
'<br>'+
'<blockquote>'+
'<cite class="title">{{note.title}}</cite> <br><br> {{note.content}}' +
'</blockquote>' +
'</div>'
然后将委托事件处理程序添加到共同的祖先:
$(document).on('click', '.deleteme', function(){
$(this).closest('.note').remove();
});
处理程序的this
将是图像/按钮,因此您只需使用closest()
找到要删除的项目。在你的情况下,这是class="note"
的元素。
document
是最好的默认值。然后,他们在事件时将jQuery选择器应用于bubble-chain中的元素。然后它将您的函数应用于仅导致事件的匹配元素。传递给事件函数的this
值将是单击的匹配项。onclick=""
)将您的事件注册与事件处理程序分开,没有任何好处。document
高一级,但默认优于body
,因为body
在某些情况下可能会失败。由于您拥有备注的父UL
,因此请将您的HTML更改为UL
上的ID并定位:
e.g。
<ul id="mynotes">
<li ng-repeat="note in notes">
<my-note note="note" delete="deleteNote(note)"></my-note>
</li>
</ul>
然后代码变成
$('#mynotes').on('click', '.deleteme', function(){
$(this).closest('.note').remove();
});