在Javascript函数中从Angular自定义指令获取变量

时间:2015-08-04 06:45:47

标签: javascript html angularjs angularjs-directive

这个问题可能听起来有点奇怪,如果是这样,请为我的无知道歉。我是AngularJS的新手,必须从Javascript函数中获取自定义指令中的变量。

这是指令(它读取csv文件,我想要这样的文件的标题):

var myApp = angular.module('myApp', []);

myApp.directive('csvReader', [function ($scope) {
// Function to convert to JSON
var convertToJSON = function (content) {

  // Declare our variables
  var lines = content.csv.split('\n');
  var headers = lines[0].split(content.separator);

      scope: {
          heads: headers;

      };   

  var columnCount = lines[0].split(content.separator).length,
      results = [];

  // For each row
  for (var i = 1; i < lines.length; i++) {

      // Declare an object
      var obj = {};

      // Get our current line
      var line = lines[i].split(new RegExp(content.separator + '(?![^"]*"(?:(?:[^"]*"){2})*[^"]*$)'));

      // For each header
      for (var j = 0; j < headers.length; j++) {

          // Populate our object
          obj[headers[j]] = line[j];
      }

      // Push our object to our result array
      results.push(obj);
  }

  // Return our array
  return results;
 };

我需要获取的变量是标题,我所做的是通过scope.heads = headers将这样的值放在范围中,如代码所示。

在html中,我需要获取headers变量或scope.header。为此,我有一个看起来像这样的Javascript函数(在html文件中):

<script>
function change() {
    var scope = angular.element($("#outer")).scope();//this is for a <div> to be updated every time the scope.heads variable changes
    scope.$apply(function(){
        scope.heads = angular.element('[csv-reader]').scope.heads; //this does not retrieve the data and is actually my problem.
    })
}
</script>

正如我所说的,我对Angular很新,但我知道我可以通过这种方式从控制器中获取变量:

function change() {
    var scope = angular.element($("#outer")).scope();
    scope.$apply(function(){
        scope.heads = angular.element('[ng-controller=fieldsController]').scope().heads; //this works perfectly, of course I have a controller called fieldsController and inside I have the variable scope.heads
    })
}

是否有可能将我需要的变量从自定义指令转换为html部分中的Javascript?

提前致谢

1 个答案:

答案 0 :(得分:0)

首先:这是一个坏主意,重新考虑您的架构。你为什么不在棱角分明的范围内使用解决方案?如果您告诉我们您尝试解决的更多问题,也许我们可以帮助您找到更好的方法。

第二:headers对于该指令的convertToJSON函数是私有的,因此您无法从外部获取对它的引用。要使其可访问,请将其放在范围内(因为您已经有一个从范围中获取变量的方法)。

此外,这部分可能不是您正在寻找的语法 - 它应该做什么?:

scope: {
      heads: headers;
  };

目前的做法是定义带有标签&#39;范围的labelled block。您是否尝试使用headers属性扩展$ scope?尝试这样的事情:

$scope.heads = headers;