我有这样的指令
<div my-directive="htmlItem"></div> //htmlItem is dynamic
我的指示
angular.module('myApp').directive('myDirective', [
function () {
return {
restrict: "A",
scope: {
myDirective: '='
},
controller: myDirectiveCtrl
};
}]);
function myDirectiveCtrl($scope) {
console.log($scope.myDirective) => output html like <div>Product</div>
//I want to add click event in my html so it becomes
//<div ng-click="vm.clickProduct()">Product</div>
//I do
angular.element($scope.myDirective).find('div').attr('ng-click',
'vm.clickProduct()');
}
当我从浏览器检查元素时,我在html中看到vm.clickProduct()
但是当我点击它时,点击事件永远不会激活。有没有办法触发vm.clickProduct()
?非常感谢!
答案 0 :(得分:2)
你需要使用$ compile编译你的html来触发你点击你的按钮。 像这样 $编译(yourHTML)($范围);
答案 1 :(得分:1)
尝试使用link
功能,如下所示:
var myApp = angular.module('myApp', []);
myApp.controller('MyController',function(){});
myApp.directive('htmlItem', function() {
return {
restrict: "A",
scope: {
myDirective: '='
},
link: function(scope, element, attrs) {
element.bind('click', function() {
alert('you have clicked');
})
}
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyController">
<div html-item="">Click Me</div>
</div>
&#13;
答案 2 :(得分:1)
myDirectiveCtrl有点击功能你应该提到控制器中的名称和控制器的别名名称vm定义为控制器的别名,所以控制器也需要
'vm.clickProduct() - &gt;如果该模板位于Controller范围内,请使用clickProduct()。另外使用链接中的函数调用Controller方法