我见过人们从他们的代码中的任何地方这样做:
$rootScope.$broadcast('someEvent', someParameter);
Run Code Online (Sandbox Code Playgroud)
然后在一些控制器中:
$rootScope.$on('someEvent', function(event, e){ /* implementation here */ });
Run Code Online (Sandbox Code Playgroud)
现在,我想从一个指令中扩展一个事件.在rootScope级别播放它是一种好习惯吗?我想在控制器中处理这个事件.我可以使用$ scope,还是我还要听$ rootScope?
我的问题很简单,我只想将控制器函数传递给指令.换句话说,我只想从指令中调用控制器函数.
var myapp =angular.module('myapp',[]);
myapp.controller('myCtrl',['$scope','$timeout',function($scope,$timeout){
$scope.fnItemsOnAdded = function(itms){
alert('Hi, I am in controller add. Here are your Items: '+JSON.stringify(itms));
}
$scope.fnItemsOnCancel = function(itms){
alert('Hi, I am in controller cancel. Here are your Items: '+JSON.stringify(itms));
}
}]);
myapp.directive('myPicker',['$timeout',function($timeout){
var dtv={};
dtv.template = '<li ng-repeat="itm in ngModel.ItemsList"><label><input type="checkbox" ng-model="itm.IsSelected" />{{itm.Name}}</label></li>';
dtv.template += '<a href="javascript:void(0)" ng-click="addItems()" class="addItems">add items</a>';
dtv.template += '<a href="javascript:void(0)" ng-click="cancelItems()" class="cancel">cancel</a>';
dtv.scope = { postUrl: '@', jsonadd: '&', jsoncancel: '&' };
dtv.restrict = 'A';
dtv.link = function($scope,elm,attrs){
$scope.ngModel={};
$scope.ngModel.SelectedKeys=[];
$timeout(function(){ …Run Code Online (Sandbox Code Playgroud)