2015-09-28 52 views
1

我这下面的指令

(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说'未定义'。

我试图完成基于从spreadsheet数据突显ng-repeat某些行,所以我用它作为ng-class="level"附接所需的类,以$scope.level,然后在代码中。

任何想法?

回答

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循环看起来更适合你的情况

+0

噢,我的,现在我明白了。谢谢 – Idefixx

+0

@Idefixx我不确定我所做的就够了。我会做一些检查,然后回来 –

+0

你确实想到了,但是你的解决方案不起作用。我所做的就是添加一个'var result',然后将''level'+ row.Level'附加到它,然后返回'result'。现在作品 – Idefixx

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()