【问题标题】:How can I call AngularJS function in JS function如何在 JS 函数中调用 AngularJS 函数
【发布时间】:2014-05-03 12:46:35
【问题描述】:

这是与 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 

【问题讨论】:

  • 取决于您放置doSomethingWithRows 的位置(在控制器、服务等中?)。在 AngularJS 中,你使用依赖注入来处理这些事情。
  • 我现在正在运行测试。两个和唯一的函数都在 里面

标签: javascript angularjs


【解决方案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();
        }
    }
]);

【讨论】:

    【解决方案2】:

    你可以使用$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

    【讨论】:

    • 小修正:请求喷油器时需要定义需要的模块var $injector = angular.injector(["ng", "MyModule"]);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2018-02-24
    相关资源
    最近更新 更多