在自定义指令之间共享方法

时间:2013-10-31 14:37:00

标签: angularjs angularjs-directive

在两个指令之间共享方法的最简单方法是什么?

我尝试过使用工厂并在我的指令中注入它。但后来我无法将参数传递给工厂。所以我可以从我的工厂获取数据,但我不能让工厂充满活力。

.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

2 个答案:

答案 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)