Javascript ng单击$event=未定义
我正在尝试使用angularjs和twitter引导创建一个带有自定义html的popover。因为这个函数还没有在angular ui中实现,所以我在angular指令中使用引导方法 我编译指令内部的模板,并附加编译后的元素作为popover的内容 它工作正常,但当ng click fired时,回调中的$event未定义。我需要这个$event(通过Javascript ng单击$event=未定义,javascript,jquery,angularjs,twitter-bootstrap,Javascript,Jquery,Angularjs,Twitter Bootstrap,我正在尝试使用angularjs和twitter引导创建一个带有自定义html的popover。因为这个函数还没有在angular ui中实现,所以我在angular指令中使用引导方法 我编译指令内部的模板,并附加编译后的元素作为popover的内容 它工作正常,但当ng click fired时,回调中的$event未定义。我需要这个$event(通过$event.target)来获取元素,我将隐藏并隐藏它 代码很简单: mymodal.controller('MainCtrl', funct
$event.target
)来获取元素,我将隐藏并隐藏它
代码很简单:
mymodal.controller('MainCtrl', function ($scope) {
$scope.test = function(e) {
console.log('test');
};
});
mymodal.directive('testD', function ($compile) {
return {
restrict: 'EAC',
template: "<a href='#' id='pop-over-link'>Show pop-over</a>",
scope: {test: '&'},
link: function(scope, element, attrs) {
var templateData =
"<button class='btn btn-default btn-sm cancel' ng-click='test($event)'>Cancel</button>";
var compliedData = $compile(templateData)(scope);
$(element)
.popover({html: true,
content: compliedData
})
.on('click', function(e) {
e.preventDefault();
return true;
});
}
}
});
mymodal.controller('MainCtrl',函数($scope){
$scope.test=功能(e){
console.log('test');
};
});
指令('testD',函数($compile){
返回{
限制:“EAC”,
模板:“”,
作用域:{test:'&'},
链接:函数(范围、元素、属性){
var templateData=
“取消”;
var compliedData=$compile(templateData)(范围);
$(元素)
.popover({html:true,
内容:compliedData
})
.on('click',函数(e){
e、 预防默认值();
返回true;
});
}
}
});
JsFiddle:
我做错了什么?我该如何修复它?很有趣。当您在指令的作用域上定义test时,它会注册事件-请参阅此提琴: 添加此功能:
link: function(scope, element, attrs) {
scope.test = function(e) {
console.log(e);
}
因为您使用表达式绑定进行测试,并且没有将事件传递到该绑定中,所以当它到达外部作用域中的函数时,它将丢失。尝试使用“=”绑定而不是“&”。因为指令“testD”实例化了它自己的作用域,所以无法在主控制器中编写测试函数。相反,您可以按以下方式进行操作
第一种方式:
在指令控制器中编写测试函数,如下所示:
controller:function($scope){
$scope.test = function(e) {
console.log(e);
};
},
第二种方式:
在指令链接中写入测试函数:
link: function(scope, element, attrs) {
scope.test = function(e) {
console.log(e);
};
然后您就可以根据需要获取事件
您可以跟踪更新的小提琴以了解更多详细信息:
我使用了您的方法,它是有效的,但现在关闭回调只触发一次。所以,我打开popover,用“关闭按钮”慢慢进入,然后再次打开它,之后我无法关闭它。并且不激发ng-click()方法。我如何找出问题所在?您能提供JSFIDLE吗?这样我就可以看一下了?是的,这里有一个新问题: