1

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

我尝试过使用工厂并将其注入我的指令中。但是我不能将参数传递给工厂。所以我可以从我的工厂取回数据,但我不能让工厂动态化。

.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
4

2 回答 2

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');
于 2013-10-31T14:46:48.347 回答
1

共享数据创建服务是正确的做法。

在您的服务上创建一个函数来处理数据

.factory('MenuItems', function(){
   var someDataToShare = ...
   return {
     someFunction: function(data) {
       // process data here
       return someDataToShare
     }
   }
});

像这样称呼它:

  $scope.processedData = MenuItems.someFunction($scope.someData)
于 2013-10-31T14:44:21.533 回答