角动力工厂

时间:2013-02-17 22:41:26

标签: dynamic angularjs factory

我正在尝试使用单个控制器列出多个类似的集合,因此我可以使用相同的控制器调用不同的模板。事实上,现在我有6个控制器用于列表,另外6个用于表单,但它们都是重复的。

我做了一个非功能性的plunker只是为了表明我打算如何工作。我已经避免声明路由提供者因为知道它不起作用我试图尽可能直截了当。 http://plnkr.co/edit/d06PcrJS5newhrmNy6EJ?p=preview

我在stackoverflow上看到如何使用动态名称声明一个类:

var str = "MyClass";
var obj = new window[str];

但由于我无法找到它存储的位置,我无法检索它。

有没有人提示如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用Angular的injector返回所需的服务实例。例如:

app.controller('NodeListCtrl', function($scope, $location, $injector) {
  var modelName = $location.path().split("/")[1];

  $scope.modelName = modelName.charAt(0).toUpperCase() + modelName.slice(1);

  $scope.nodes = $injector.get($scope.modelName).query();
});

注意:不要忘记将$injector添加到控制器的功能签名中。

jsfiddle http://jsfiddle.net/bmleite/Mvk2y/