2013-07-17 49 views
1

我試圖將文件中的文本保存到rootscope中的字符串中。我至今是一個指令,它加載正常,並檢查它返回以下輸出中的一個文本文件,上面寫着根Angular.js作用域傳遞文件讀取器錯誤

function callData($rootScope) { 
    console.log("function working"); 
    console.log($rootScope.data); 
} 

angular.module('spreadsheetApp').directive('fileReader', function($rootScope) { 
    return { 
     restrict: 'E', 
     scope: true, 
     templateUrl:'views/fileReaderTemplate.html', 
     controller: 'fileReaderController', 
     link: function (scope, element, attributes, controller) { 
      $element.bind("change", function(event) { 
       var files = event.target.files; 
       var reader = new FileReader(); 
       reader.onload = function() { 
        $rootScope.data = this.result; 
        console.log($rootScope.data); 
        callData($rootScope.data); 
        console.log("55"); 
       };     
       reader.readAsText(files[0]); 
      }); 
     } 
    }  
}); 

功能:

# Text file 
Hello, world! 

輸出:

Hello, world! 
function working 
fileDirective.js:44 
Uncaught TypeError: Cannot read property 'data' of undefined fileDirective.js:45 
callData fileDirective.js:45 
reader.onload 

回答

1

由於您試圖訪問函數外的作用域,因此需要執行一些額外的操作。

回答你的問題已經在這裏找到答案: AngularJS access scope from outside js function

您需要使用此代碼:

var scope = angular.element($("#yourelement")).scope(); 

CFR:http://jsfiddle.net/arunpjohny/sXkjc/8/

+0

我如何才能訪問rootScope,不需要angular.element? – user1876508

+1

正如你想通過功能的rootcope,你需要做的 callData($ rootScope); 而不是 callData($ rootScope.data); 因爲你現在試圖在callData函數中做的事情實際上是$ routScope.data.data,它不存在,因此錯誤... –