Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ng单击$event=未定义_Javascript_Jquery_Angularjs_Twitter Bootstrap - Fatal编程技术网

Javascript ng单击$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

我正在尝试使用angularjs和twitter引导创建一个带有自定义html的popover。因为这个函数还没有在angular ui中实现,所以我在angular指令中使用引导方法

我编译指令内部的模板,并附加编译后的元素作为popover的内容

它工作正常,但当ng click fired时,回调中的$event未定义。我需要这个$event(通过
$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吗?这样我就可以看一下了?是的,这里有一个新问题: