Angularjs 函数完成后如何在全局对象中获取var

Angularjs 函数完成后如何在全局对象中获取var,angularjs,function,wait,var,Angularjs,Function,Wait,Var,具有将*.csv文件转换为JSON的函数。 在函数中,我可以将这个JSON打印到console.log console.log(jsonner); 但我不能把它转移到角度控制器$scope.names=jsonner; 我有两个问题:如何等待功能,以及如何使var jsonner全球化 function csvJSON(csv){ var lines=csv.split("\n"); var result = []; var headers=lines[0].split(",");

具有将*.csv文件转换为JSON的函数。 在函数中,我可以将这个JSON打印到console.log console.log(jsonner); 但我不能把它转移到角度控制器$scope.names=jsonner; 我有两个问题:如何等待功能,以及如何使var jsonner全球化

function csvJSON(csv){

  var lines=csv.split("\n");
  var result = [];
  var headers=lines[0].split(",");

  for(var i=1;i<lines.length;i++){

      var obj = {};
      var currentline=lines[i].split(",");

      for(var j=0;j<headers.length;j++){
          obj[headers[j]] = currentline[j];
      }

      result.push(obj);

  }

  //return result; //JavaScript object
  return JSON.stringify(result); //JSON
}

function processFiles(files) {
    var file = files[0];
    var reader = new FileReader();
    reader.onload = function (e) {
    // Когда это событие активируется, данные готовы.
    // Вставляем их в страницу в элемент <div>
    var output = document.getElementById("fileOutput");   
    output.textContent = e.target.result;
    content = output.textContent;
    jsonner = csvJSON(content);
    console.log(jsonner);
};
    reader.readAsText(file);

}




var SearchApp = angular.module('SearchApp',[]);
 SearchApp.controller('ctrl2', ['$scope', function($scope){
    // Here the array would be your response.text:
    $scope.names = jsonner;

}]);
函数csvJSON(csv){
变量行=csv.split(“\n”);
var结果=[];
var headers=行[0]。拆分(“”,“”);

对于(var i=1;i您是
$scope.names
指向内存中的原始
jsonner
。您正在使用
jsonner=csvJSON(content);
创建一个新对象,因为它返回
结果
数组。您必须修改原始数组,使其以您想要的方式更新

下面是一个工作逻辑的演示,让您开始:

不幸的是,
文件
输入不适用于
ng change
,但是有一些解决方法。您可以这样做:

或者,您可以在自定义指令中使用
element.on('change',processFiles)
连接事件。下面是我所做的:

<body ng-controller="ctrl2">
  <input id="fileInput" type="file" ng-model="files" onchange="angular.element(this).scope().processFiles(this)">
  <div>{{ output }}</div>

  <div ng-repeat="todo in names track by $index" class="repeat">
      <div class="comname">{{todo.Name}}</div>
      <div class="price">{{todo.Price}}</div>
      <div class="change">{{todo.Change}}</div>
  </div>
</body>

{{output}}
{{todo.Name}
{{todo.Price}}
{{todo.Change}}
逻辑是:

var SearchApp = angular.module('SearchApp', []);
SearchApp.controller('ctrl2', ['$scope', function ($scope) {
    $scope.processFiles = function (element) {
      var file = element.files[0];
      var reader = new FileReader();

      reader.onload = function (e) {
        // Need to notify angular of this event using $apply
        $scope.$apply(function() {
          // Когда это событие активируется, данные готовы.
          // Вставляем их в страницу в элемент <div>
          var output = document.getElementById("fileOutput");
          $scope.output = e.target.result;
          jsonner = csvJSON(e.target.result);
          console.log(jsonner);
          $scope.names = jsonner;
        });
      };

      reader.readAsText(file);
    };


}]);
var SearchApp=angular.module('SearchApp',[]);
SearchApp.controller('ctrl2',['$scope',函数($scope){
$scope.processFiles=函数(元素){
var file=element.files[0];
var reader=new FileReader();
reader.onload=函数(e){
//需要使用$apply通知angular此事件
$scope.$apply(函数(){
// Когда это событие активируется, данные готовы.
// Вставляем их в страницу в элемент 
var output=document.getElementById(“fileOutput”);
$scope.output=e.target.result;
jsonner=csvJSON(e.target.result);
console.log(jsonner);
$scope.names=jsonner;
});
};
reader.readAsText(文件);
};
}]);

您是
$scope。name
指向内存中的原始
jsonner
。您正在使用
jsonner=csvJSON(content);
创建一个新对象,因为它返回
结果
数组。您必须修改原始数组,以使其以您想要的方式更新

下面是一个工作逻辑的演示,让您开始:

不幸的是,
文件
输入不适用于
ng change
,但是有一些解决方法。您可以这样做:

或者,您可以在自定义指令中使用
element.on('change',processFiles)
连接事件。下面是我所做的:

<body ng-controller="ctrl2">
  <input id="fileInput" type="file" ng-model="files" onchange="angular.element(this).scope().processFiles(this)">
  <div>{{ output }}</div>

  <div ng-repeat="todo in names track by $index" class="repeat">
      <div class="comname">{{todo.Name}}</div>
      <div class="price">{{todo.Price}}</div>
      <div class="change">{{todo.Change}}</div>
  </div>
</body>

{{output}}
{{todo.Name}
{{todo.Price}}
{{todo.Change}}
逻辑是:

var SearchApp = angular.module('SearchApp', []);
SearchApp.controller('ctrl2', ['$scope', function ($scope) {
    $scope.processFiles = function (element) {
      var file = element.files[0];
      var reader = new FileReader();

      reader.onload = function (e) {
        // Need to notify angular of this event using $apply
        $scope.$apply(function() {
          // Когда это событие активируется, данные готовы.
          // Вставляем их в страницу в элемент <div>
          var output = document.getElementById("fileOutput");
          $scope.output = e.target.result;
          jsonner = csvJSON(e.target.result);
          console.log(jsonner);
          $scope.names = jsonner;
        });
      };

      reader.readAsText(file);
    };


}]);
var SearchApp=angular.module('SearchApp',[]);
SearchApp.controller('ctrl2',['$scope',函数($scope){
$scope.processFiles=函数(元素){
var file=element.files[0];
var reader=new FileReader();
reader.onload=函数(e){
//需要使用$apply通知angular此事件
$scope.$apply(函数(){
// Когда это событие активируется, данные готовы.
// Вставляем их в страницу в элемент 
var output=document.getElementById(“fileOutput”);
$scope.output=e.target.result;
jsonner=csvJSON(e.target.result);
console.log(jsonner);
$scope.names=jsonner;
});
};
reader.readAsText(文件);
};
}]);

这些函数在哪里调用?{{todo.Name}{{todo.Price}{{todo.Change}}}好的,所以这些函数是在angularjs之外的javascript中调用的。如果使用ng Change,则可以将行更改为
$scope.names=csvJSON(内容);
并在控制器中放入
$scope.processFiles=function(files){…}
我必须如何编写ng更改?
您可能需要在
reader.onload=function(e){}
中使用
$scope.$apply()
如果
$scope.names
没有更新,这些函数在哪里调用?{{todo.Name}{{{todo.Price}}{{{todo.Change}好的,这些函数是在angularjs之外的javascript中调用的。如果使用ng change,则可以将行更改为
$scope.names=csvJSON(content);
,并在控制器中放入
$scope.processFiles=function(files){…}
我必须如何编写ng更改?
如果
$scope.names
没有更新.Object.assign(全局,jsonner),您可能需要在
reader.onload=function(e){}
中用
$scope.$apply()
包装逻辑;这将生成全局jsonner,并像在控制器中使用global.jsonner一样使用它。错误:jsonner未定义在我必须放置它的位置?在您的函数中,像这样分配RSSULT global.jsonner=jsonner;并在角度控制器中使用global.JSONNERRINGNORE 1st commentObject.assign(全局,jsonner);这将生成全局jsonner,并在您的控制器中像global.jsonner一样使用它。警告引用错误:jsonner未定义必须放在哪里?在您的函数中,像global.jsonner=jsonner这样分配RSSULT;并在角度控制器中使用global.JSONNERRINGNORE第一条注释