使用$ rootScope。来自angular指令'link'的广播麻烦

时间:2017-05-23 19:49:58

标签: javascript angularjs angularjs-directive

我正在尝试从我的angular指令中广播一些数据。指令。我收到cannot read property $broadcast of undefined错误。我试图从我的指令向控制器广播数据的方式是否存在某种问题?

    angular.module('myapp').directive("fileread", function (ServerRequest, $sessionStorage, $rootScope) {
  return {
    scope: {
      myData: '=',
      opts: '='
    },
    link: function ($scope, $elm, $attrs, $rootScope) {
      console.log($scope)
      console.log('fileread before',$scope.myData,$scope.opts)
      $elm.on('change', function (changeEvent) {
        console.log('directive');
        var reader = new FileReader();
        console.log(reader)
        reader.onload =function (evt) {
          $scope.$apply(function () {
            var data = evt.target.result;
            console.log('fileread scope apply')

            var workbook = XLSX.read(data, {type: 'binary'});
            ------------PROBLEM IS BELOW HERE-------------
            $scope.broadcastfilename = data; 
            $rootScope.$broadcast('filenameforupload', '$scope.broadcastfilename');
            console.log('passed broadcast');
            -------------AND ABOVE HERE--------------------

            var headerNames = XLSX.utils.sheet_to_json(
                                workbook.Sheets[workbook.SheetNames[0]],
                                { header: 1 }
                              )[0];

            var importedData = XLSX.utils.sheet_to_json( workbook.Sheets[workbook.SheetNames[0]]);
            console.log(headerNames,workbook);
            console.log(importedData)

            $sessionStorage.headerNames  = headerNames;
            $sessionStorage.importedData = importedData;
            // addRows(data);
            $elm.val(null);
            //this is where we add the new data to the existing data
            var query = {
              patients: importedData,
              coverKey: $sessionStorage.practiceLogged.coverKey
            }

          });
        };
        reader.readAsBinaryString(changeEvent.target.files[0]);
      });
    }
  }
}); 

在我的控制器中我有:

        $scope.$on('filenameforupload', function(event, args) {
      console.log(args, "<------------");
    });

1 个答案:

答案 0 :(得分:1)

$rootScope函数中删除link参数,这会导致指令工厂函数中存在注入$rootScope依赖项。