如何在JS函数中调用AngularJS函数

时间:2014-05-03 12:46:35

标签: javascript angularjs

这是与angularjs的第一次互动。这是第一次。我怎样才能调用该功能并在另一个控制器中获取这些物品?

我正在使用AngularJS加载CSV文件

var Mymodule = angular.module('Mymodule', []);
Mymodule.factory('Items', ['$http', function($http){
      var Url   =  "data/ex.csv";
      var Items = $http.get(Url).then(function(response){
         return csvParser(response.data);
      });
      return Items;
    }]);

我需要获取返回的值来对我拥有的数据进行一些过滤吗?

  function doSomethingWithRows(rows) {
       //Mymodule.Items
      // How to call data here. 
    }

更新 基于第一个答案

<script>
        var Mymodule = angular.module('Mymodule', []);
        Mymodule.factory('Items', ['$http', function($http){
              var Url   =  "data/ex.csv";
              var Items = $http.get(Url).then(function(response){
                 return csvParser(response.data);
              });
              return Items;
            }]);

    var $injector = angular.injector();
    $injector.invoke(['Items', function(Items){ console.log(Items) }]);


</script>

错误:

Uncaught Error: Unknown provider: ItemsProvider <- Items 

2 个答案:

答案 0 :(得分:1)

您可以使用$injector

var $injector = angular.injector(["ng", "MyModule"]);
$injector.invoke(['Items', function(Items){ 
  /* do stuff */ 
  console.log(Items);  // e.g. print the Items
}]);

$injector用于检索某些提供程序(例如您的Items工厂)定义的对象实例。

fiddle

答案 1 :(得分:1)

我会扩展你的工厂,这样你就可以调用一个函数来获得结果。

Mymodule.factory('Items', [
  '$http', 
  function($http){
      var Items;          

      this.loadItems = function loadItems() {     
          var Url   =  "data/ex.csv";
          $http.get(Url).then(function(response){
              Items = csvParser(response.data);
          });
      }

      this.returnItems = function returnItems() {
          return Items;
      }
}]);

然后在你的控制器中:

Mymodule.controller("Controller", [
    "Items",
    function(Items){
        Items.loadItems();

        function doSomethingWithRows(rows) {
            var items = Items.returnItems();
        }
    }
]);