当我尝试在点击时显示所选元素值时,它显示所有元素值..如果我添加了用户名,则在下面的代码中,当我们点击任何标签时,它必须显示相应的删除图标..但是这里它向所有添加的标签显示删除图标。请你告诉我如何解决这个问题?
var app = angular.module('myapp', ['ngSanitize']);
var counter = 0
app.controller('MainCtrl', function($scope, $compile) {
$scope.add = function(index) {
var username = '<div ng-click="showRemove()"><label>User Name</label>//click//<input type="text"><button id="buttonId'+counter+'" ng-show="remove">-</button></div>';
var user = $compile(username)($scope);
angular.element(document.getElementById('add')).append(user);
};
$scope.showRemove = function(){
$scope.remove = true;
}
++counter;
});
&#13;
<!DOCTYPE html>
<html ng-app="myapp">
<head>
<script src="https://code.angularjs.org/1.4.8/angular.js"></script>
<script src="https://code.angularjs.org/1.5.0-rc.0/angular-sanitize.min.js"></script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="add($index)">Add</button>
<hr>
<div id="add"></div>
</body>
</html>
&#13;
答案 0 :(得分:1)
使用委托的jQuery事件处理程序而不是内联事件处理程序来动态添加元素。如果你使用jQuery,jQuery方式会更好。
将类添加到删除按钮,例如class="deleteme"
:
var username = '<div ng-click="showRemove()"><label>User Name</label>//click//<input type="text"><button id="buttonId'+counter+'" ng-show="remove" class="deleteme">-</button></div>';
然后处理程序变为
$(document).on('click', '.deleteme', function(){
$(this).closest('div').remove();
});
document
只是动态元素的共同祖先。它可以是用户条目之上的任何共同祖先。
document
是最好的默认值。然后,他们在事件时将jQuery选择器应用于bubble-chain中的元素。然后它将您的函数应用于仅导致事件的匹配元素。传递给事件函数的this
值将是单击的匹配项。onclick=""
)将您的事件注册与事件处理程序分开,没有任何好处。document
高一级,但默认优于body
,因为body
在某些情况下可能会失败。答案 1 :(得分:1)
如果你想要接近你试图解决它的方式,这可能是一个解决方案:
var app = angular.module('myapp', ['ngSanitize']);
var counter = 0
app.controller('MainCtrl', function($scope, $compile) {
$scope.add = function(index) {
var username = '<div ng-click="showRemove('+counter+')"><label>User Name</label>//click//<input type="text"><button id="buttonId'+counter+'" ng-show="'+counter+ ' == active">-</button></div>';
var user = $compile(username)($scope);
angular.element(document.getElementById('add')).append(user);
++counter;
};
$scope.showRemove = function(counter){
$scope.active = counter;
}
$scope.active = -1;
});