Javascript 为什么可以';在指令的html调用中不能访问$rootScope吗?
我使用ng csv允许用户下载他们数据的csv。创建下载链接的代码从通用插件模块附加到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 +=
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
,它就会工作。