Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么可以';在指令的html调用中不能访问$rootScope吗?_Javascript_Angularjs_Csv_Angularjs Scope_Ng Grid - Fatal编程技术网

Javascript 为什么可以';在指令的html调用中不能访问$rootScope吗?

Javascript 为什么可以';在指令的html调用中不能访问$rootScope吗?,javascript,angularjs,csv,angularjs-scope,ng-grid,Javascript,Angularjs,Csv,Angularjs Scope,Ng Grid,我使用ng csv允许用户下载他们数据的csv。创建下载链接的代码从通用插件模块附加到HTML页面。在公共模块中,我将导出数据设置为一个rootScope变量,这样就可以从视图中调用它,除非它只是返回一个空白文档。我在哪下车 相关插件代码: function getOutput(){ return csvStringify(csvOutput); } var stringifiedOutput = csvStringify(csvOutput); csvDataLinkHtml +=

我使用ng csv允许用户下载他们数据的csv。创建下载链接的代码从通用插件模块附加到HTML页面。在公共模块中,我将导出数据设置为一个rootScope变量,这样就可以从视图中调用它,除非它只是返回一个空白文档。我在哪下车

相关插件代码:

function getOutput(){
    return csvStringify(csvOutput);
}
var stringifiedOutput = csvStringify(csvOutput);

csvDataLinkHtml += "<span type='button' lazy-load='true' ng-csv='$root.csvOutput' csv-header='"+csvStringify(headers)+"' filename='data.csv' class='csv-data-link-span'><i class='fa fa-file-excel-o excel-icon'></i></span>";

$(function() {
  angular.element(document).injector().invoke(function($rootScope, $compile) {
    var link = $compile(csvDataLinkHtml);
    csvDataLinkHtml = link(scope);
    fp.append(csvDataLinkHtml);
    $rootScope.csvOutput = stringifiedOutput;
  });
});
函数getOutput(){ 返回csvStringify(csvOutput); } var stringifiedOutput=csvStringify(csvOutput); csvDataLinkHtml+=“”; $(函数(){ angular.element(document).injector().invoke(函数($rootScope,$compile){ var link=$compile(csvDataLinkHtml); csvDataLinkHtml=链接(范围); fp.append(csvDataLinkHtml); $rootScope.csvOutput=stringifiedOutput; }); });
澄清一下,这是一个ng网格插件。

我在代码示例中缺少一些上下文,但您可能将模板链接到了不同的范围

尝试在chrome inspector中选择所需的元素,并在控制台中键入
angular.element($0).scope()
,以获取相关的作用域。
我猜您可能想执行
$rootScope.$new()
并将其与新元素链接。

我们最终将csv数据设置为window.csvData,并更改ng csv指令中的几行代码:

function getOutput(){
    return csvStringify(csvOutput);
}
var stringifiedOutput = csvStringify(csvOutput);


window.csvMyData = csvOutput;
var csvDataLinkHtml = "<div class='ngHeaderButton2'><span type='button' lazy-load='true' ng-csv='[]' ng-csv-reference='csvMyData' csv-header='"+csvStringify(headers)+"' filename='data.csv' class='csv-data-link-span'><i class='fa fa-file-excel-o excel-icon'></i></span></div>";

$(function() {
  angular.element(document).injector().invoke(function($compile) {
    var link = $compile(csvDataLinkHtml);
    csvDataLinkHtml = link(scope);
    fp.append(csvDataLinkHtml);
  });
}); 
函数getOutput(){ 返回csvStringify(csvOutput); } var stringifiedOutput=csvStringify(csvOutput); window.csvMyData=csvOutput; var csvDataLinkHtml=“”; $(函数(){ angular.element(document).injector().invoke(函数($compile){ var link=$compile(csvDataLinkHtml); csvDataLinkHtml=链接(范围); fp.append(csvDataLinkHtml); }); });
哪里是
getOutput
?在控制器中?为什么要访问
this.csvOutput
而不是
$scope.csvOutput
$rootScope.csvOutput
?getOutput是插件文件中的另一个函数。我上面粘贴的代码位于一个公共插件文件中,该文件由多个具有不同数据的页面引用,这些数据将成为csvOutput,而不是在控制器中,因此我无法设置/获取$scope.csvOutput。因此,如果您不在控制器中,为什么要尝试访问
$rootScope
上的内容<代码>$rootScope不是对
文档的引用
$rootScope
是一个服务,作为对其他AngularJS“东西”的依赖项注入,如控制器和其他服务。在插件代码中,我想设置一个作用域变量,该变量等于stringifiedOutput,然后可以在HTML中引用:
“”我认为使用rootScope变量可能有效。还有其他想法吗?但你没有回应我说,在注入AngularJS代码的地方,除了AngularJS代码之外,没有什么东西是
$rootScope
。因此,
$rootScope.csvOutput='foo'
window.csvOutput='foo'
不同。在第一种情况下,您需要获取对
$rootScope
的引用,并且只有依赖项注入器()可以这样做<代码>var stringifiedOutput=csvStringify(csvOutput)$rootScope.csvOutput
,则code>可能无法工作。如果您设置
window.csvOutput
,它就会工作。