从指令
问题描述:
传递参数范围功能角度JS假设我有这样从指令
<div my-directive callback='doSomething(myArg)'></div>
angular.module('directives').directive('myDirective', function() {
return {
restrict: 'A',
scope: {
callback: '&'
},
link: function(scope, element, attrs) {
element.bind('someEvent', function() {
scope.callback({myArg: 'bla'});
});
}
}
});
一个指令。如果我想一个参数传递给我的示波器的功能,我需要做的scope.callback({myArg: 'BLA'})。我想知道是否有办法通过论证而不必指定其名称?
答
使用可以在这种情况下,使用共享服务,并注入它的指令:
angular.module("yourAppName", []).factory("mySharedService", function($rootScope){
var mySharedService = {};
mySharedService.values = {};
mySharedService.setValues = function(params){
mySharedService.values = params;
$rootScope.$broadcast('dataPassed');
}
return mySharedService;
});
而且注射后它的指令。例如:
app.directive('myDirective', ['mySharedService', function(mySharedService){
return {
restrict: 'C',
link: function (scope, element, attrs) {
mySharedService.setValues(//some value//);
}
}
}]);
然后,您可以在控制器中获得必要的值。
function MyCtrl($scope, mySharedService) {
$scope.$on('dataPassed', function() {
$scope.newItems = mySharedService.values;
});
}
没有其他办法,您可以通过隔离范围使用服务或2种方式的数据绑定,但这些方式甚至比传递命名参数更具礼貌性。 –
我想你可以使用pub/sub服务,如果你感兴趣,我为Angular创建了一个。 – glepretre