2015-09-28 48 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()