这个问题可能听起来有点奇怪,如果是这样,请为我的无知道歉。我是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?
提前致谢
答案 0 :(得分:0)
首先:这是一个坏主意,重新考虑您的架构。你为什么不在棱角分明的范围内使用解决方案?如果您告诉我们您尝试解决的更多问题,也许我们可以帮助您找到更好的方法。
第二:headers
对于该指令的convertToJSON
函数是私有的,因此您无法从外部获取对它的引用。要使其可访问,请将其放在范围内(因为您已经有一个从范围中获取变量的方法)。
此外,这部分可能不是您正在寻找的语法 - 它应该做什么?:
scope: {
heads: headers;
};
目前的做法是定义带有标签&#39;范围的labelled block。您是否尝试使用headers
属性扩展$ scope?尝试这样的事情:
$scope.heads = headers;