如何从javascript函数中访问angular $scope
how to access angular $scope from a javascript function
我添加了一个在javascript中解析CSV文件的功能。我想把解析后的数据赋值给$scope.data.arr。目前,下面的代码给出错误"Uncaught ReferenceError: scope is not defined"。我是AngularJS的新手,我遵循了官方的angular教程。
代码是:
application.js
'use strict';
/* Application module */
var ddvApp = angular.module('ddvApp', ['ddvControllers']);
dataController.js
'use strict';
/*Data Controller*/
var ddvControllers = angular.module('ddvControllers', []);
ddvControllers.controller('DataController', ['$scope', function($scope){
$scope.data = {}; //created a empty data object.
}]);
read-csv.js
function handleFiles(files) {
// Check for the various File API support.
if (window.FileReader) {
// FileReader are supported.
getAsText(files[0]);
}
else {
alert('FileReader are not supported in this browser.');
}
}
function getAsText(fileToRead) {
var reader = new FileReader();
// Read file into memory as UTF-8
reader.readAsText(fileToRead);
// Handle errors load
reader.onload = loadHandler;
reader.onerror = errorHandler;
}
function loadHandler(event) {
var csv = event.target.result;
scope.data.arr = processData(csv); //this is the line of code where i want to assign the parsed data to the angularjs $scope.
}
function processData(csv) {
var allTextLines = csv.split(/'r'n|'n/);
var lines = [];
for (var i = 0; i < allTextLines.length; i++) {
var data = allTextLines[i].split(',');
var arr = [];
for (var j = 0; j < data.length; j++) {
arr.push(data[j].trim());
}
lines.push(arr);
}
return lines;
}
function errorHandler(event) {
if(event.target.error.name == "NotReadableError") {
alert("Cannot read file !");
}
}
——UPDATE Problem Statement.
handleFiles()函数在用户选择要解析的新csv文件时被调用。
html代码:<input type="file" id="csvFileInput" onchange="handleFiles(this.files)" accept=".csv">
我首先在javascript中实现了解析CSV的代码。我使用这些数据来渲染html画布上的图形。我想要一个功能,用户只是选择一个不同的csv文件与更新的数据和图形应该更新自己没有进一步的输入。我添加了angularjs,因为(在未来的实现中)文件和图形需要保存到数据库。此外,一些数据可以从服务器请求,而不是用户使用csv文件加载。
虽然你可以通过angular的element()
函数访问$scope
,但看起来这段代码最好放在angular的service
中。
如果这样做是出于某种原因不是一个选项,您需要一个DOM元素的引用,属于您的controller
。
一旦你有了这个,你就可以
angular.element(myDomElement).scope()
,这应该给你一个参考。
你也可以使用element.find()
和css选择器,但要注意,如果你没有加载JQuery
,你只剩下一组有限的选择器(只有标签名)。
参见Docs中的angular.element
应该做的是复制所有的JavaScript从read-csv.js,并把它放在dataController.js下面这行:
$scope.data = {}; //created a empty data object.
定义arr为数组:
$scope.data = {
arr: []
};
在作用域前面加一个'$',这样行应该是:
$scope.data.arr = processData(csv);
正确的方法是将read-csv.js文件中的函数放入服务中,然后使用$rootScope处理事件。广播和$scope.$on。
所以它可能看起来像:
module.factory('readCsv' ['$rootScope', function(rootScope){
var readCsv = {};
// load readCsv with read-csv.js functions
readCsv.loadHandler = function(event){
var csv = readCsv.processData(event.target.result);
$rootScope.$broadcast('$csvEvent', csv);
};
return readCsv;
}]).controller('DataController', ['$scope', function($scope){
$scope.data = {};
$scope.$on('$csvEvent', function(csv){
$scope.data.arr = csv;
};
}]);
- 如何使用(this)访问Angular 2 http rxjs catch函数中的对象属性
- angularjs:访问angular控制器中的jquery变量
- 可以't访问Angular.js服务中的功能
- 无法访问Angular Directive模板函数中的属性实际值
- 如何从其他方法访问Angular.js$scope
- 控制器无法访问Angular Service变量
- 在 Jasmine 测试中无法访问 Angular 服务函数
- 控制器内部无法访问Angular js输入模型
- 从自己的事件中访问angular$scope
- 无法使用typescript访问angular中另一个控制器中声明的$rootscope属性
- 如何访问Angular JS模板指令中设置的值,如“ng class?”
- 从函数内部、类内部、模块内部访问 Angular 服务
- 为什么可以't我访问Angular创建的新DOM元素
- 如何在 ng 重复中访问 Angular 表单上的$valid
- 使用 jQuery 访问 Angular 指令中的元素
- 如何通过 Javascript 注入访问 Angular 属性
- FlowJS示例,用于循环访问Angular控制器中的文件
- 如何在视图表达式中访问 Angular 服务
- JavaScript 访问 Angular 范围返回“未定义” - 异步问题
- 访问 Angular .js 中的另一个控制器