我很难搞清楚这一点。我有一个指令从promise数据构建html。对于每一行,它都为CRUD操作添加按钮。我不知道如何在我的控制器中触发按钮事件。无论我的控制器如何设置,如何在控制器中注册事件?我目前正在尝试$ emit,但似乎没有任何事情发生。
指令生成html:
controls = controls+'<button type="button" data-tooltip-placement="bottom" data-tooltip="'+action.name+'" ng-click="$emit(''+action.broadcaster+'','+rowId+')" name="'+action.name+'" class="btn btn-xs btn-default ng-scope"><i class="'+action.icon+'"></i> </button>'
它在chrome工具中的外观:
<button type="button" data-tooltip-placement="bottom" data-tooltip="delete" ng-click="$emit('removeOrgCourse',134)" name="delete" class="btn btn-xs btn-default ng-scope"><i class="fa fa-trash-o"></i> </button>
和我的控制器监听器:
$scope.$on('removeOrgCourse', function( event, data ){
console.log(data);
});
更新: 刚刚将ng-click更改为console.log(“click”),没有任何反应。所以问题是ng-click没有注册;
答案 0 :(得分:0)
也许你必须使用$ broadcast,取决于控制器是在同一级别还是由谁控制。
Working with $scope.$emit and $scope.$on
http://toddmotto.com/all-about-angulars-emit-broadcast-on-publish-subscribing/
答案 1 :(得分:0)
虽然您可以在角度中使用事件来实现,但另一个选择是使用&
表达式范围绑定将控制器方法传递给指令。示例代码(来自egghead.io)(请参阅jsbin处的工作代码):
<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>'
};
});