我有这些功能:
$scope.addProduct = function($event, obj) {
var myEl = angular.element($event.target);
myEl.parent().html('<button class="btn btn-danger btn-xs" ng-click="removeProduct('+ obj.id +')">Remove from Widget</button>');
};
$scope.removeProduct = function(id) {
console.log('Remove ->' + id);
};
当我点击“addProduct”时,它可以工作,但是当我点击“removeProduct”时不起作用。看起来它没有听我点击我添加的新按钮。我该如何解决?
答案 0 :(得分:1)
要使ngClick
生效,您需要首先编译HTML并将其链接到$scope
:
.controller('someCtrl', function ($compile, $scope) {
...
$scope.addProduct = function($event, obj) {
var myEl = angular.element($event.target);
var myBtn = $compile('<button class="btn btn-danger btn-xs" ng-click="removeProduct('+ obj.id +')">Remove from Widget</button>')($scope);
myEl.after(myBtn);
};
$scope.removeProduct = function(id) {
console.log('Remove ->' + id);
};
});
<强>更新强>
Kos Prov's comment 是非常正确的 - 有时您会考虑解决问题,但您认为问题首先不是错误的。
所以,当然操纵DOM应该是指令的责任,所以我创建了一个指令来做你想要的(根据你的问题):
app.directive('removableProduct',function($ compile){ var btnTmpl = ''+ '从Widget中移除'+ '';
return {
restrict: 'A',
scope: {item: '='},
template: '<div ng-click="addProduct($event)">{{item.description}}</div>',
controller: function ($scope) {
$scope.addProduct = function (evt) {
var myEl = angular.element(evt.target);
var myBtn = $compile(btnTmpl)($scope);
myEl.after(myBtn);
};
$scope.removeProduct = function(id) {
console.log('Remove -> ' + id);
};
}
};
});
另请参阅此 short demo 。
答案 1 :(得分:0)
如果以Angular方式执行此操作,则存在不存在的问题。
对于每个产品,尝试保持一个布尔值,例如&quot; productAdded&#39;在你的$ scope模型中。
然后你可以做例子:
<div ng-repeat="product in products">
<button ng-show="product.productAdded" class="btn btn-danger btn-xs" ng-click="addProduct(product)">Add to Widget</button>
<button ng-show="!product.productAdded" class="btn btn-danger btn-xs" ng-click="removeProduct(product.id)">Remove from Widget</button>
</div>
希望这能为你澄清一点!
答案 2 :(得分:0)
如果要在添加产品后添加删除按钮,则应在ng-repeat本身中添加删除按钮:
<强> JS 强>
<div ng-app="app" ng-controller="ctrl">
<ul>
<li ng-repeat="product in products">
{{product.name }}<button ng-click="deleteProduct(product)">Delete</button>
</li>
</ul>
</div>
<强>控制器强>
var app = angular.module('app', []);
app.controller('ctrl', function($scope) {
$scope.products = [{ name:'pencil' }, { name: 'crayon' }, { name: 'pen' }];
$scope.deleteProduct = function(product) {
var index = $scope.products.indexOf(product);
if (index >=0) {
// remove the product
$scope.products.splice(index, 1);
}
}
});