$ scope变量' undefined'使用array.prototype.foreach

时间:2015-09-28 11:40:31

标签: javascript angularjs angularjs-directive

我有以下指令

(function() {

  'use strict';

  angular
    .module('app')
    .directive('rcLevel', ['spreadsheet', rcLevel]);

  function rcLevel(spreadsheet) {
    return {
      restrict: 'A',
      scope: {
        record: '='
      },
      templateUrl: 'js/directives/rcLevel.html',
      controller: function($scope) {
        $scope.spreadsheet = spreadsheet.data;
        $scope.propsOpen = false;
        $scope.props = Object.keys($scope.record.properties).length > 0;
        $scope.level = level($scope.record);
        console.log($scope.level);

        // Logic

        function level(record) {

          $scope.spreadsheet.forEach(function(row) {
            if (row.Name.indexOf(record.event) > -1) {
              console.log('Highlighting: level' + row.Level);
              return 'level' + row.Level;
            }
          });
        }

      }

    };
  }
})();

我将其与ng-repeat一起使用。一切正常,但$scope.level据说是未定义的。

level函数内的控制台日志记录工作正常,但控制台日志记录$scope.level表示未定义'。

我正在尝试根据ng-repeat中的数据突出显示spreadsheet中的某些行,因此我将所需的类附加到$scope.level,然后在代码中使用ng-class="level" {1}}。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这应该纠正它:

      for (var i = 0; i < $scope.spreadSheets.length; ++i) {
        if ($scope.spreadSheets[i].Name.indexOf(record.event) > -1) {
          console.log('Highlighting: level' + row.Level);
          return 'level' + $scope.spreadSheets[i].Level;
        }
      });

说明: foreach中的函数返回一些不在任何地方传播的东西。你所做的是以下几点:

function a(){
   b();
}

function b(){
   return true;
}

if (a()) => always falsy

修改

我将foreach改为for循环,看起来更适合你的情况

答案 1 :(得分:0)

你的函数level可能没有返回值,修改这个函数

if (row.Name.indexOf(record.event) > -1) {
              console.log('Highlighting: level' + row.Level);
              return 'level' + row.Level;
}else{
             return 'hello world';
}

然后,如果行console.log($scope.level);显示hello world,则更改函数level()的逻辑