Angularjs 如何从指令构建的html中获取$emit to controller

Angularjs 如何从指令构建的html中获取$emit to controller,angularjs,javascript-events,Angularjs,Javascript Events,我很难弄明白这一点。我有一个从promise数据构建html的指令。对于每一行,它都添加了用于CRUD操作的按钮。我不知道如何在我的控制器中触发按钮事件。无论我的控制器是如何设置的,我如何才能让事件在我的控制器中注册?我目前正在尝试$emit,但似乎什么也没发生 指令生成的html: controls = controls+'<button type="button" data-tooltip-placement="bottom" data-tooltip="'+action.name+'

我很难弄明白这一点。我有一个从promise数据构建html的指令。对于每一行,它都添加了用于CRUD操作的按钮。我不知道如何在我的控制器中触发按钮事件。无论我的控制器是如何设置的,我如何才能让事件在我的控制器中注册?我目前正在尝试$emit,但似乎什么也没发生

指令生成的html:

controls = controls+'<button type="button" data-tooltip-placement="bottom" data-tooltip="'+action.name+'" ng-click="$emit(&apos;'+action.broadcaster+'&apos;,'+rowId+')" name="'+action.name+'" class="btn btn-xs btn-default ng-scope"><i class="'+action.icon+'"></i> </button>'
更新:
只是将ng click更改为console.log(“click”),什么也没发生。所以问题是ng click没有注册

可能您必须使用$broadcast,这取决于控制器是否在同一级别,或者谁在谁之上


在secon链接中,您可以将$emit和$broadcast放在同一个控制器中,并查看您在$on中捕捉到了什么

也许您必须使用$broadcast,这取决于控制器是否处于同一级别或谁在谁之上


在secon链接中,您可以将$emit和$broadcast放在同一个控制器中,并查看$on中捕获了什么。虽然您可以使用角度事件来实现这一点,但另一个选项是使用
&
表达式范围绑定将控制器方法传递给指令。示例代码(来自)(请参阅处的工作代码):

和指令:

 app.directive("phone", function() {
        return {
            scope: {
                dial: "&"
            },
            template: '<input type="text" ng-model="value">' +
              '<div class="button" ng-click="dial({message:value})">Call home!</div>'
        };
    });
app.directive(“phone”,function()){
返回{
范围:{
拨号:&“
},
模板:“”+
“打电话回家!”
};
});

虽然您可以使用angular中的事件来实现这一点,但另一个选项是使用
&
表达式范围绑定将控制器方法传递给指令。示例代码(来自)(请参阅处的工作代码):

和指令:

 app.directive("phone", function() {
        return {
            scope: {
                dial: "&"
            },
            template: '<input type="text" ng-model="value">' +
              '<div class="button" ng-click="dial({message:value})">Call home!</div>'
        };
    });
app.directive(“phone”,function()){
返回{
范围:{
拨号:&“
},
模板:“”+
“打电话回家!”
};
});

在这种情况下,$emit是正确的选项。我遇到的问题是ng click和$compile不工作。在本例中,$emit是正确的选项。我遇到的问题是ng click和$compile不工作。您的答案是正确的,尽管它不能解决我的问题。我发现我的问题与ng click和$compile有关。ng click根本不起作用,当我编译html时,它会破坏其他代码。我认为这与jquery datatables有关。您的答案是正确的,尽管它不能解决我的问题。我发现我的问题与ng click和$compile有关。ng click根本不起作用,当我编译html时,它会破坏其他代码。我认为这与jquery数据表有着特殊的关系。
<div ng-app="phoneApp">
<!-- we've replaced the use of $scope with the preferred "controller as" syntax. see:http://toddmotto.com/digging-into-angulars-controller-as-syntax/ -->
<div ng-controller="AppCtrl as appctrl">
    <div phone dial="appctrl.callHome(message)"></div>
    <div phone dial="appctrl.callHome(message)"></div>
    <div phone dial="appctrl.callHome(message)"></div>
</div>
    app.controller("AppCtrl", function() {
        var appctrl = this;
        appctrl.callHome = function(message) {
            alert(message);
        };
    });
 app.directive("phone", function() {
        return {
            scope: {
                dial: "&"
            },
            template: '<input type="text" ng-model="value">' +
              '<div class="button" ng-click="dial({message:value})">Call home!</div>'
        };
    });