在两个指令之间共享方法的最简单方法是什么?
我尝试过使用工厂并在我的指令中注入它。但后来我无法将参数传递给工厂。所以我可以从我的工厂获取数据,但我不能让工厂充满活力。
.directive('myFirstDirective', [...])
.directive('seconDirective', [...])
.factory('MenuItems', [function(){
return "testString";
}]);
通过将工厂添加到我的代码,我可以在任何指令中执行:
var test = MenuItems;
但我不想做的是:
var test = MenuItems(myParameter); //so I can change the return in menuItems depending on myParameter
答案 0 :(得分:2)
您可以使用服务来执行此操作:
https://gist.github.com/anonymous/50b659c72249b58c31bf
.factory('MenuItemsService', [function(){
return {
getMenuItems : function(parameter){
if ( parameter === 'foo' ){
return ['bar', 'jar', 'tar'];
} else {
return ['asd', 'bsd', 'csd'];
}
}
};
}]);
然后在每个指令中,您可以注入服务,例如:
MenuItemsService.getMenuItems('foo');
MenuItemsService.getMenuItems('bar');
答案 1 :(得分:1)
分享创建服务的数据是正确的。
在您的服务上创建一个处理数据的功能
.factory('MenuItems', function(){
var someDataToShare = ...
return {
someFunction: function(data) {
// process data here
return someDataToShare
}
}
});
这样称呼:
$scope.processedData = MenuItems.someFunction($scope.someData)